无法在 Visual Studio 2012 中的 opengl 中绘制
Can't draw in opengl in visual studio 2012
我正试图弄清楚如何使用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 "GLGLglut.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(),但什么也没发生。背景是完全白色的,即使它应该是红色的。
您已经通过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();
您可能也想更改三角形的颜色。红色上的红色很难看到:)
相关文章:
- 了解 GLM- openGL 中的相机转换
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 是否可以在 OpenGL 中的同一调用中呈现两个具有不同索引起点的不同缓冲区?
- 如何使实例化在我的 OpenGL 程序中工作?
- CMake on FindOpenGL.cmake 中的错误,当使用导入的目标 OpenGL::GLU?
- 理解OpenGL中的绑定
- 在C++中覆盖OpenGL的纹理包装器
- OpenGL GLSL 片段着色器中的随机数
- 类中的 OpenGL 函数
- 如何在C 中的OpenGL中通过矩形显示文本
- QT QML 中的 OpenGL,无法更新屏幕上的图像
- 片段着色器中的 OpenGL 纹理黑色
- Ubuntu VirtualBox中的OpenGL多线程示例
- 着色器存储缓冲区中的 OpenGL 顶点
- 无法在 Visual Studio 2012 中的 opengl 中绘制
- Qt中的OpenGL不绘制红色方块
- 在C++中的OpenGL中将坐标从三维透视投影映射到二维正投影
- Android NDK中的OpenGL ES 2.0:没有绘制任何内容
- 虚拟机中的OpenGL问题
- 从 Windows 中的 OpenGL 窗口捕获视频