无法在 Visual Studio 2012 中的 opengl 中绘图
Posted
技术标签:
【中文标题】无法在 Visual Studio 2012 中的 opengl 中绘图【英文标题】:Can't draw in opengl in visual studio 2012 【发布时间】:2013-12-05 18:55:53 【问题描述】:我正在尝试弄清楚如何使用Visual Studio 2012
使opengl
在Windows 8.1
中工作。
我的程序编译并运行,但在创建的窗口中没有任何反应,我什至无法更改背景颜色或看到鼠标。
我的程序如下所示:
main.cpp
#include <cstdio>
#include <iostream>
#include "simpleViewer.h"
using namespace std;
int main(int argc, char **argv)
simpleViewer Viewer;
Viewer.initOpenGL(argc, argv);
Viewer.run();
simpleViewer.h
#pragma once
#ifndef _SIMPLEVIEWER_H_
#define _SIMPLEVIEWER_H_
#include "GL\GL\glut.h"
#include <iostream>
enum DisplayModes
DISPLAY_MODE_OVERLAY,
DISPLAY_MODE_DEPTH,
DISPLAY_MODE_IMAGE
;
class simpleViewer
public:
simpleViewer(void);
~simpleViewer(void);
virtual void run();
virtual void initOpenGL(int argc, char **argv);
virtual void initOpenGLHooks();
virtual void display();
virtual void displayPostDraw();
DisplayModes m_eViewState;
private:
static simpleViewer* ms_self;
static void glutIdle();
static void glutDisplay();
;
#endif
和 simpleViewer.cpp
#include "simpleViewer.h"
#define GL_WIN_SIZE_X 1280
#define GL_WIN_SIZE_Y 1024
// Undeprecate CRT functions
#ifndef _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_DEPRECATE 1
#endif
simpleViewer* simpleViewer::ms_self;
simpleViewer::simpleViewer(void)
ms_self = this;
simpleViewer::~simpleViewer(void)
void simpleViewer::initOpenGL(int argc, char **argv)
glutInit(&argc, argv);
glutInitWindowSize(GL_WIN_SIZE_X, GL_WIN_SIZE_Y);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH);
glutCreateWindow ("Test");
// glutFullScreen();
glutSetCursor(GLUT_CURSOR_NONE);
initOpenGLHooks();
glDisable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glClearColor(1.0f,0.0f,0.0f,1.0f);
void simpleViewer::initOpenGLHooks()
glutDisplayFunc(glutDisplay);
glutIdleFunc(glutIdle);
void simpleViewer::run()
glutMainLoop();
void simpleViewer::display()
glBegin(GL_TRIANGLES);
glColor3f(1.0,0,0);
glVertex3f(0.1,0,0);
glVertex3f(0,0,0);
glVertex3f(0,0,0.1);
glEnd();
glFlush();
void simpleViewer::glutIdle()
glutPostRedisplay();
void simpleViewer::glutDisplay()
simpleViewer::ms_self->display();
我已经检查过了,它确实进入了 display(),但是没有任何反应。即使它应该是红色的,背景也是完全白色的。
【问题讨论】:
【参考方案1】:您已通过GLUT_DOUBLE
请求双缓冲。
在simpleViewer::display()
的末尾使用glutSwapBuffers()
而不是glFlush()
。
glClearColor()
仅锁定某些状态。 glClear()
实际上很清楚。在simpleViewer::display()
的顶部添加glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT)
。
对于默认的投影/模型视图矩阵,该三角形是不稳定的。试试这个:
glBegin( GL_TRIANGLES );
glVertex2i( 0, 0 );
glVertex2i( 1, 0 );
glVertex2i( 1, 1 );
glEnd();
您可能还想更改三角形颜色。红色上的红色很难看到:)
【讨论】:
好的,现在背景是黑色的,还没有三角形,当我把它移到窗口上时鼠标消失了。 @Erik:鼠标问题可能是由于您的glutSetCursor(GLUT_CURSOR_NONE)
调用。以上是关于无法在 Visual Studio 2012 中的 opengl 中绘图的主要内容,如果未能解决你的问题,请参考以下文章
无法在Visual Studio 2012中调试Web Api
Visual Studio Express 2012 无法添加到 Visual Studio Team Services 的连接
无法在 Visual Studio 2012 中编译 TypeScript 文件