59式歼星舰A186 59式歼星舰A186
关注数: 7 粉丝数: 12 发帖数: 719 关注贴吧数: 36
看完间章上半段感觉关于凯文人设有些东西不吐不快 感觉剧情里的凯文就像是刻意迎合梅面前的人设一样。 首先,按理说过7律之后凯文就开始心理问题变冰了,但是配音包括人物表情都显得凯文要么是真的没心没肺要么是在故意在梅面前装作没事人。 其次,梅和凯文之间的对话就像梅在PUA凯文一样,去和苏一起聊哲学,给凯文灌输凯文完全不能理解的知识,整个过程中尬的就有一种你对一个几岁小孩子去讲世界的本源是物质还是意识的哲学思辨一样,凯文只能嗯,嘛,啊,对。搞得凯文自己很没存在感。 另一方面鞭策凯文要有自己的理想,别天天跟着自己,自己早晚要离开凯文,不能陪他,那既然有意划清界限何必又在后面加重语气强调“你的女朋友”呢。而且对此类问题凯文的回答永远是我的理想就是你的理想能够实现,然后收获一个白眼但自己还得跟着哈哈哈打马虎眼,太舔了这也,就有一种凯文在这段关系里莫名很卑微的感觉,哪怕在外面凯文像是人类领袖逐火先锋,在梅面前那个感觉就像是人在跟猩猩玩一样。 讲真这一对真不合适,一个事要探求世间真理想去穷尽理论的实干者,一个是想安稳度过当下被迫肩负起命运的一个理想者,两人很难有什么共同话题,亚撒西追到梅纯属打马虎眼,仅仅靠亚撒西是绝对不可能让这种关系长久的。 对于凯文人设编剧哪怕走夏活那种冷冰冰但是沙雕的路线也比现在硬套之前是阳光大男孩的人设好,很多人说吃到了🍬,然而我却在这里莫名挖出来了💩,是我魔怔了。
如何在MFC应用的view文件里调用OpenGL的mouse函数让图形旋转起来 ###### 问题遇到的现象和发生背景 我需要实现 1.创建1个基于MFC的单文档窗口。 2.窗口背景为黄色。 3.使用OpenGL函数绘制一个正方形,颜色为填充蓝色: a)(-0.3,-0.3) b)(-0.3,0.3) c)(0.3,0.3) d)(0.3,-0.3) 4.在鼠标左键单击时,开始绕原点逆时针连续动态旋转,旋转步长和速度自行定义;在鼠标左键再次单击时,旋转停止。 ###### 问题相关代码,请勿粘贴截图 我的OpenGL代码以及MFCAppView代码 MyOpenGL: #include "stdafx.h" #include "MyOpenGL.h" #include "WinsOpenGLAppView.h" static GLfloat spin = 0.0; MyOpenGL::MyOpenGL() { } MyOpenGL::~MyOpenGL() { wglMakeCurrent(hDC, NULL); wglDeleteContext(hRC); } bool MyOpenGL::SetupPixelFormat(HDC hdc) { hDC = hdc; PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), // pfd结构的大小 1, // 版本号 PFD_DRAW_TO_WINDOW | // 支持在窗口中绘图 PFD_SUPPORT_OPENGL | // 支持OpenGL PFD_DOUBLEBUFFER, // 双缓存模式 PFD_TYPE_RGBA, // RGBA 颜色模式 24, // 24 位颜色深度 0, 0, 0, 0, 0, 0, // 忽略颜色位 0, // 没有非透明度缓存 0, // 忽略移位位 0, // 无累加缓存 0, 0, 0, 0, // 忽略累加位 32, // 32 位深度缓存 0, // 无模板缓存 0, // 无辅助缓存 PFD_MAIN_PLANE, // 主层 0, // 保留 0, 0, 0 // 忽略层,可见性和损毁掩模 }; int nPixelFormat; // 像素点格式 if (!(nPixelFormat = ChoosePixelFormat(hDC, &pfd))) { MessageBox(NULL, L"can not find proper mode", L"Error", MB_OK | MB_ICONEXCLAMATION); return FALSE; } SetPixelFormat(hDC, nPixelFormat, &pfd); hRC = wglCreateContext(hDC); //利用GDI绘图所使用的HDC创建对应的HGLRC wglMakeCurrent(hDC, hRC); //使OpenGL绘图所使用的HGLRC为当前绘图工具 return TRUE; } void MyOpenGL::Init(void) { glClearColor(1.0f, 1.0f, 0.0f, 1.0f); } void MyOpenGL::Render(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); //绘制操作: glColor3ub(0, 0, 255); glBegin(GL_POLYGON);//填充凸多边形 glColor3f(0.0, 0.0, 1.0); glVertex3f(0.5f, 0.5f, 0.0f); glVertex3f(0.5f, -0.5f, 0.0f); glVertex3f(-0.5f, -0.5f, 0.0f); glVertex3f(-0.5f, 0.5f, 0.0f); glRotatef(spin, 0.0, 0.0, 1.0);//旋转方向,遵循右手原则 glPopMatrix(); glEnd(); SwapBuffers(hDC); } void spinDisplay(void) { spin = spin + 0.04; if (spin > 360.0) { spin = spin - 360.0; } glutPostRedisplay(); } void MyOpenGL::mouse(int button, int state,int x,int y) { switch (button) { case GLUT_LEFT_BUTTON: if (state == GLUT_DOWN) glutIdleFunc(spinDisplay);//glutIdleFunc函数如果启用,这个idle function会被不断调用,直到有窗口事件发生 else if (state == GLUT_UP) glutIdleFunc(NULL); break; case GLUT_RIGHT_BUTTON: if (state == GLUT_DOWN) glutIdleFunc(spinDisplay); else if (state == GLUT_UP) glutIdleFunc(NULL); break; default: break; } } void MyOpenGL::Reshape(int width, int height) { glViewport(0, 0, width, height); } WinsOpenGLAppView: // WinsOpenGLAppView.cpp : CWinsOpenGLAppView 类的实现 // #include "stdafx.h" // SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的 // ATL 项目中进行定义,并允许与该项目共享文档代码。 #ifndef SHARED_HANDLERS #include "WinsOpenGLApp.h" #endif #include "WinsOpenGLAppDoc.h" #include "WinsOpenGLAppView.h" #ifdef _DEBUG #define new DEBUG_NEW #endif // CWinsOpenGLAppView IMPLEMENT_DYNCREATE(CWinsOpenGLAppView, CView) BEGIN_MESSAGE_MAP(CWinsOpenGLAppView, CView) // 标准打印命令 ON_COMMAND(ID_FILE_PRINT, &CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView::OnFilePrint) ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CWinsOpenGLAppView::OnFilePrintPreview) ON_WM_CONTEXTMENU() ON_WM_RBUTTONUP() ON_WM_CREATE() ON_WM_SIZE() ON_COMMAND(ID_32771, &CWinsOpenGLAppView::On32771) ON_WM_LBUTTONDOWN() ON_WM_TIMER() ON_WM_MOUSEMOVE() ON_WM_LBUTTONUP() ON_WM_RBUTTONDOWN() END_MESSAGE_MAP() // CWinsOpenGLAppView 构造/析构 CWinsOpenGLAppView::CWinsOpenGLAppView() { // TODO: 在此处添加构造代码 } CWinsOpenGLAppView::~CWinsOpenGLAppView() { } BOOL CWinsOpenGLAppView::PreCreateWindow(CREATESTRUCT& cs) { // TODO: 在此处通过修改 // CREATESTRUCT cs 来修改窗口类或样式 cs.style |= WS_CLIPCHILDREN | WS_CLIPSIBLINGS; return CView::PreCreateWindow(cs); } // CWinsOpenGLAppView 绘制 void CWinsOpenGLAppView::OnDraw(CDC* /*pDC*/) { CWinsOpenGLAppDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 在此处为本机数据添加绘制代码 opengl.Render(); } // CWinsOpenGLAppView 打印 void CWinsOpenGLAppView::OnFilePrintPreview() { #ifndef SHARED_HANDLERS AFXPrintPreview(this); #endif } BOOL CWinsOpenGLAppView::OnPreparePrinting(CPrintInfo* pInfo) { // 默认准备 return DoPreparePrinting(pInfo); } void CWinsOpenGLAppView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: 添加额外的打印前进行的初始化过程 } void CWinsOpenGLAppView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) { // TODO: 添加打印后进行的清理过程 } void CWinsOpenGLAppView::OnContextMenu(CWnd* /* pWnd */, CPoint point) { #ifndef SHARED_HANDLERS theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_EDIT, point.x, point.y, this, TRUE); #endif } // CWinsOpenGLAppView 诊断 #ifdef _DEBUG void CWinsOpenGLAppView::AssertValid() const { CView::AssertValid(); } void CWinsOpenGLAppView::Dump(CDumpContext& dc) const { CView::Dump(dc); } CWinsOpenGLAppDoc* CWinsOpenGLAppView::GetDocument() const // 非调试版本是内联的 { ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CWinsOpenGLAppDoc))); return (CWinsOpenGLAppDoc*)m_pDocument; } #endif //_DEBUG // CWinsOpenGLAppView 消息处理程序 int CWinsOpenGLAppView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 在此添加您专用的创建代码 opengl.SetupPixelFormat(::GetDC(GetSafeHwnd())); opengl.Init(); SetTimer(1, 5000, NULL); return 0; } void CWinsOpenGLAppView::OnSize(UINT nType, int cx, int cy) { CView::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码 opengl.Reshape(cx, cy); } void CWinsOpenGLAppView::On32771() { // TODO: 在此添加命令处理程序代码 int i; i = 10; } void CWinsOpenGLAppView::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if (nIDEvent == 1) { Invalidate(FALSE); } CView::OnTimer(nIDEvent); } void CWinsOpenGLAppView::OnLButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if (nFlags == 1) { SetTimer(1, 100, NULL); opengl.mouse(GLUT_LEFT_BUTTON, GLUT_DOWN, point.x, point.y); } else { KillTimer(1); } CView::OnLButtonDown(nFlags, point); } void CWinsOpenGLAppView::OnLButtonUp(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 CView::OnLButtonUp(nFlags, point); opengl.mouse(GLUT_LEFT_BUTTON, GLUT_UP, point.x, point.y); } void CWinsOpenGLAppView::OnRButtonDown(UINT nFlags, CPoint point) { // TODO: 在此添加消息处理程序代码和/或调用默认值 if (nFlags == 1) { SetTimer(1, 100, NULL); opengl.mouse(GLUT_RIGHT_BUTTON, GLUT_DOWN, point.x, point.y); } else { KillTimer(1); } CView::OnRButtonDown(nFlags, point); } void CWinsOpenGLAppView::OnRButtonUp(UINT nFlags , CPoint point) { CView::OnLButtonUp(nFlags, point); opengl.mouse(GLUT_RIGHT_BUTTON, GLUT_UP, point.x, point.y); } ###### 运行结果及报错内容 运行完成可以生成背景和图像,但是鼠标消息事件可以触发,但是点击后不会旋转。 ###### 我想要达到的结果 我现在想知道要如何修改可以让OnLButtonDown函数成功调用mouse函数。
新人求教,一个数据结构图的问题 #include<iostream> #include<iomanip> #include<queue> #include<string> using namespace std; const int MaxSize = 500; const int MaxEdge = 249500; int visited[MaxSize]={0}; template<typename DataType> class MGraph { public: MGraph(DataType a[],int n,int e); ~MGraph(){}; void DFTraverse(int v); void BFTraverse(int v); void Prim(int v); void Kruskal(); void Dijkstra(int v); void Floyd(); private: int FindRoot(int parent[],int v); int Min(int r[ ], int n); DataType vertex[MaxSize]; int edge[MaxSize][MaxSize]; int vertexNum,edgeNum; int MinEdge(int r[ ], int n); }; template<typename DataType> MGraph<DataType>::MGraph(DataType a[],int n,int e) { int i,j,k; vertexNum = n;edgeNum = e; for(i=0;i<vertexNum;i++) vertex[i]=a[i]; for(i=0;i<vertexNum;i++) for(j=0;j<vertexNum;j++) edge[i][j]=0; for(k=0;k<vertexNum;k++) { cin>>i>>j; edge[i][j]=1; edge[j][i]=1; } } template<typename DataType> void MGraph<DataType>::DFTraverse(int v) { cout<<vertex[v]; visited[v]=1; for(int j=0;j<vertexNum;j++) if(edge[v][j]==1&&visited[j]==0) DFTraverse(j); } template<typename DataType> void MGraph<DataType>::BFTraverse(int v) { int w,j,Q[MaxSize]; int front = -1,rear = -1; cout<<vertex[v]; visited[v] = 1; Q[++rear] = v; while(front != rear) { w = Q[++front]; for(j=0;j<vertexNum;j++) if(edge[w][j]==1&&visited[j]==0) { cout << vertex[j]; visited[j] = 1; Q[++rear] = j; } } } template<typename DataType> void MGraph<DataType>::Prim(int v) { int i,j,k; int adjvex[MaxSize],lowcost[MaxSize]; for(i = 0;i < vertexNum;i++) { lowcost[i]=edge[v][i];adjvex[i]=v; } lowcost[v]=0; for(k = 1;k < vertexNum;k++) { j=MinEdge(lowcost,vertexNum); cout << j << adjvex[j] << lowcost[j] << endl; lowcost[j]=0; for(i = 0;i < vertexNum;i++) if(edge[i][j]<lowcost[i]) { lowcost[i]=edge[i][j];adjvex[i]=j; } } } template <class DataType> int MGraph<DataType> :: MinEdge(int r[ ], int n) { int index = 0, min = 100; for (int i = 1; i < n; i++) if (r[i] != 0 && r[i] < min) { min = r[i]; index = i; } return index; } template<typename DataType> void MGraph<DataType>::Kruskal() { int num = 0,i,vex1,vex2; int parent[vertexNum]; for(i = 0;i < vertexNum;i++) parent[i] = -1; for(num = 0,i =0;num < vertexNum-1;i++) { vex1 = FindRoot(parent,edge[i].from); vex1 = FindRoot(parent,edge[i].to); if(vex1 != vex2) { cout<<"("<<edge[i].from<<","<<edge[i].to<<")"<<edge[i].weight; parent[vex2]=vexl; num++; } } } template <class DataType> int MGraph<DataType> :: FindRoot(int parent[],int v) { int t = v; while(parent[t] > -1) t = parent[t]; return t; } template <class DataType> void MGraph<DataType> :: Dijkstra(int v) { int i, k, num, dist[MaxSize]; string path[MaxSize]; for (i = 0; i < vertexNum; i++) { dist[i] = edge[v][i]; if (dist[i] != 1000) path[i] = vertex[v] + vertex[i]; else path[i] = ""; } for (num = 1; num < vertexNum; num++) { k = Min(dist, vertexNum); cout << path[k] <<":" << dist[k] << endl; for (i = 0; i < vertexNum; i++) if (dist[i] > dist[k] + edge[k][i]) { dist[i] = dist[k] + edge[k][i]; path[i] = path[k] + vertex[i]; } dist[k] = 0; } } template <class DataType> int MGraph<DataType> :: Min(int r[ ], int n) { int index = 0, min = 1000; for (int i = 0; i < n; i++) if (r[i] != 0 && r[i] < min) { min = r[i]; index = i; } return index; } template <class DataType> void MGraph<DataType> :: Floyd( ) { int i, j, k, dist[MaxSize][MaxSize]; string path[MaxSize][MaxSize]; for (i = 0; i < vertexNum; i++) for (j = 0; j < vertexNum; j++) { dist[i][j] = edge[i][j]; if (dist[i][j] != 1000) path[i][j] = vertex[i] + vertex[j]; else path[i][j] = ""; } for (k = 0; k < vertexNum; k++) for (i = 0; i < vertexNum; i++) for (j = 0; j < vertexNum; j++) if (dist[i][k] + dist[k][j] < dist[i][j]) { dist[i][j] = dist[i][k] + dist[k][j]; path[i][j] = path[i][k] + path[k][j]; } for (i = 0; i < vertexNum; i++) { for (j = 0; j < vertexNum; j++) cout << path[i][j] << ":" << dist[i][j] << "\t"; cout << endl; } } int main( ) { int i; char ch[ ]={'A','B','C','D','E','F'}; MGraph<char> MG(ch,6,9); for(i=0; i < MaxSize;i++) { visited[i]=0; } cout << "深度优先遍历序列是:"; MG.DFTraverse(0); for(i = 0;i < MaxSize;i++) { visited[i]=0; } cout << "广度优先遍历序列是:"; MG.BFTraverse(0); MG.Prim(0); MG.Floyd( ); return 0; } 在测试的时候会出现 1927405053.exe 中的 0x00b66767 处最可能的异常: 0xC00000FD: Stack overflow 1927405053.exe 中的 0x00b66767 处有未经处理的异常: 0xC00000FD: Stack overflow 想问一下什么情况
1 下一页