无法在 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 使openglWindows 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 2010 中的库

无法在 Visual Studio 2012 中编译 TypeScript 文件

无法在 Visual Studio 2012 中正确查看属性窗口

无法在 Windows Server 2008 上运行 Visual Studio 2012 远程调试器