OpenGL吸引麻烦
OpenGL Draw Trouble
我为OpenGL做了一个加载程序,该加载程序读取顶点,正常以及所有这些东西都按顺序排列。加载程序是正确的,我已经检查了所有值,它应该是。由于某种原因,我仍然实际上无法在屏幕上获得任何内容。
#include <SFML/Graphics.hpp>
#include <SFML/OpenGL.hpp>
#include "Loader.h"
#define SC_WIDTH 600
#define SC_HEIGHT 600
#define REFRESH_RATE 0.03f
loader load;
int main()
{
// Create the main window
sf::Window App(sf::VideoMode(SC_WIDTH, SC_HEIGHT, 32), "SFML OpenGL");
// Create a clock for measuring time elapsed
sf::Clock clock;
//load file
load.openFile();
// Set color and depth clear value
glClearDepth(1.f);
glClearColor(0.f, 0.f, 0.f, 0.f);
// Enable Z-buffer read and write
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
//lighing
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glVertexPointer(3,GL_FLOAT,0,&load.totalVertices);
glNormalPointer(GL_FLOAT,0,&load.faceNormal);
// Setup a perspective projection
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90.f, 1.f, 1.f, 500.f);
// Start game loop
while (App.isOpen())
{
// Process events
sf::Event Event;
while (App.pollEvent(Event))
{
// Close window : exit
if (Event.type == sf::Event::Closed)
App.close();
// Escape key : exit
if ((Event.type == sf::Event::KeyPressed) && (Event.key.code == sf::Keyboard::Escape))
App.close();
// Resize event : adjust viewport
if (Event.type == sf::Event::Resized)
glViewport(0, 0, Event.size.width, Event.size.height);
}
// Set the active window before using OpenGL commands
// It's useless here because active window is always the same,
// but don't forget it if you use multiple windows or controls
App.setActive();
if((float)clock.getElapsedTime().asSeconds()>REFRESH_RATE){
// Clear colour and depth buffer
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPopMatrix();
glTranslatef(0.f,0.f,-10.f);
glDrawArrays(GL_TRIANGLES, 0,(GLsizei)(load.totalVertices.size()/3));
glPushMatrix();
clock.restart();
}
// Finally, display rendered frame on screen
App.display();
}
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
return EXIT_SUCCESS;
}
对于一件事,您在呼叫glDrawArrays (...)
中将顶点数除以3,这使我相信您认为参数是三角形的数量(或更一般的,原始数量)。不是,它是顶点的数量。您不应除以3。
要注意的另一件事是,您以错误的顺序调用glPopMatrix (...)
和glPushMatrix (...)
。基本上,您第一次尝试绘制任何东西时,您基本上要下水矩阵堆栈。您可以交换两个呼叫并解决此问题,但是说实话,这首先不是必需的,因为您在调用glTranslatef (...)
之前已经加载了身份矩阵。
相关文章:
- OpenGL - 在抛出"__gnu_cxx::recursive_init_error"实例后终止调用?
- 了解 GLM- openGL 中的相机转换
- 如何在全屏模式下(在OpenGL中)使背景透明
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- OpenGL大的3D纹理(>2GB)非常慢
- OpenGl glm rotate
- C++atioglxx.pdb未加载错误glBufferData OpenGL
- OpenGL在启用深度测试时不会丢弃我的碎片
- OpenGL相机和相机空间转型的困惑
- OpenGL将纹理四边形渲染为(0,0)
- OpenGL 和 GLM 矩阵无法正确扩展,总是按比例缩小
- 发布旋转矩阵(openGL/glm)
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- 用OpenGL绘制Sierpinski的麻烦
- OpenGL吸引麻烦
- 在opengl中使用Glut的Vsync麻烦
- 在 Linux 上为 OpenGL 4.2 设置开发环境(查找 gl.h 时遇到麻烦)
- 在以面向对象的方式包装OpenGL时遇到麻烦
- 解析我的mat4变换矩阵到我的opengl着色器时遇到麻烦
- wxWidgets OpenGl着色器,麻烦得到任何绘制