vbo-opengl VBO(vertex buffer object), 在线等

问题描述

opengl VBO(vertex buffer object), 在线等

初学opengl,代码如下,不知哪里出了问题,没有办法显示正方体,一片空白。
// myFirstOpengl.cpp : Defines the entry point for the console application.

#include "stdafx.h"
#include
#define FREEGLUT_STATIC
#include
#include
#include

extern GLfloat vertexData[8][3]; //顶点数据指针
extern GLubyte colorData[8][4]; //颜色指针
extern GLuint indexData[12][3]; //索引指针
GLuint BufferName[3]; //顶点缓存和索引缓存的数组id
GLFrustum viewFrustum;
GLShaderManager shaderManager;

void SetupRC()
{
//glClearColor(0.0f, 0.0f, 0.75f, 1.0f); //设置背景颜色
glEnable(GL_DEPTH_TEST);
printf("setupRc");

shaderManager.InitializeStockShaders();

}

void ShutdownRC()
{
glGenBuffers(3, BufferName);

glBindBuffer(GL_ARRAY_BUFFER, BufferName[0]);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_STATIC_DRAW);

glBindBuffer(GL_ARRAY_BUFFER, BufferName[1]);
glBufferData(GL_ARRAY_BUFFER, sizeof(colorData), colorData, GL_STATIC_DRAW);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, BufferName[2]);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indexData), indexData, GL_STATIC_DRAW);

}

void ChangeSize(int w, int h)
{
printf("changesize");
if(h == 0)
h = 1;
glViewport(0, 0, w, h); // set viewport to window dimensions

viewFrustum.SetPerspective(35.0f, float(w)/float(h), 1.0f, 1000.0f); //angle, w/h, near, far

}
void SpecialKeys(int key, int x, int y)
{
}
void RenderScene()
{
printf("render");
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);

glBindBuffer(GL_ARRAY_BUFFER, BufferName[0]);
//glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_STATIC_DRAW);
glVertexPointer(3, GL_FLOAT, 0, 0);

glBindBuffer(GL_ARRAY_BUFFER, BufferName[1]);
//glBufferData(GL_ARRAY_BUFFER, sizeof(colorData), colorData, GL_STATIC_DRAW);
glColorPointer(4, GL_FLOAT, 0, 0);

glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, BufferName[2]);
//glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indexData), indexData, GL_STATIC_DRAW);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glDrawElements(GL_TRIANGLES, 12, GL_UNSIGNED_INT, 0);
//glDisableClientState(GL_VERTEX_ARRAY);

}
int main(int argc, char* argv[])
{
gltSetWorkingDirectory(argv[0]);

glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA |GLUT_DEPTH | GLUT_STENCIL);
glutInitWindowSize(800, 600);
glutCreateWindow("My first Opengl Example");
glutReshapeFunc(ChangeSize);//原型函数
glutSpecialFunc(SpecialKeys);//原型函数
glutDisplayFunc(RenderScene);

GLenum err = glewInit();
if(GLEW_OK != err)
{
    fprintf(stderr, "GLEW Error: %sn", glewGetErrorString(err));
    return 1;
}

SetupRC();

glutMainLoop();
ShutdownRC();
return 0;

}

解决方案

看不到全貌十有八九是相机的位置距离物体的位置关系不对

物体不在视线范围内,或者距离物体太近,全屏都被物体充满, 让你误以为没看见

时间: 2024-07-29 07:31:19

vbo-opengl VBO(vertex buffer object), 在线等的相关文章

Vertex Buffer Objects

Vertex Buffer Objects (VBOs) are Buffer Objects that are used for vertex data. Since the storage for buffer objects is allocated by OpenGL, vertex buffer objects are a mechanism for storing vertex data in "fast" memory (i.e. video RAM or AGP RAM

OpenGL ES简介

概述 在聊Android的View渲染流程中,通常会有一个比较核心的步骤:通过OpeGL ES接口调用GPU接口通知GPU绘制图形.其完整的流程:UI对象---->CPU处理为多维图形,纹理 -----通过OpeGL ES接口调用GPU----> GPU对图进行光栅化(Frame Rate ) ---->硬件时钟(Refresh Rate)----垂直同步---->投射到屏幕. 详解的绘制原理,后面会慢慢讲的. 渲染的基础知识 使用OpenGL ES,一般包括如下几个步骤: (1)

(译)OpenGL ES2.0 – Iphone开发指引

纯的不能再纯的转载,原译者说别人是牛人,不过在我看来,他也挺牛的了. 刚接触OpenGL ES时,这篇文章不知看了多少遍了,只能照本宣科,不知其然与其所以然. 后决定放弃这种不负责任的工作方式,虽然不是我的方式,但我又必须按要求做事! 按自已的想法,找到罗朝辉博客上最全面的那篇,把例子下载下来,准备花长些时间,耐下心来,一点一点地看. 到目前,从几何顶点,到灯光,到着色器,再到模型加载,最后是纹理,中间回到几何顶点几次,轻轻地,仅是轻轻地扒了一小层皮儿而已,现在再回头看这篇,感觉明白了许多. 不

《OpenGL编程指南(原书第9版)》——1.5 第一个程序:深入分析

1.5 第一个程序:深入分析 现在我们来深入探讨一下之前的第一个程序.1.5.1 进入main()函数 为了了解示例程序从一开始是如何运行的,首先了解一下main()函数当中都发生了什么.前面的6行使用GLFW设置和打开了一个渲染用的窗口.这方面的详细介绍可以参见附录A,这里只介绍每一行的执行结果. 第一个函数glfwtInit()负责初始化GLFW库.它会处理向程序输入的命令行参数,并且移除其中与控制GLFW如何操作相关的部分(例如设置窗口的大小).glfwtInit()必须是应用程序调用的第

opengl 教程(2) 在窗口画点

      原文地址:http://ogldev.atspace.co.uk/www/tutorial02/tutorial02.html       通常在写OpenGL程序时候,我们都需要glew库,该库包装了OpenGL的各种扩展,便于我们使用. 我们可以在main函数中调用glew初始化函数,之后就可以查询OpenGL各种扩展能否使用了,对于能够使用的函数,可以动态的加载.       在这篇教程中,我们首先了解一下顶点缓冲对象(VBO,vertex buffer object)的用法.

WebGL 规范(WebGL Specification)

WebGL 规范(WebGL Specification) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作. WebGL 规范 WebGL Specification 1.0.2 版,发布于 20

2014Unity亚洲开发者大会会议简录之技术篇

拖公司的福,有幸去了一趟北京参加了一场Unity3D的交流盛宴,在为期两天的时间内,不仅有着技术上收获,也有心灵上的震撼.现在先来说说技术方面的一些比较重要的知识,但是会跳过Unity3D后续版本的一些新功能介绍,比如新的GUI.动画系统的加强.以及新的AssetBundle打包工具.因为等之后版本出来后,自然会有更加详细的文档以及说明出来. 项目开发.管理和发布策略 四大准则 准则一:美术资源量对于程序发布包大小.性能优化.内存占用量的影响,往往超过其他各种因素 技术美术和关卡设计师对于游戏性

OpenGL ES From the Ground Up, Part 2: A Look at Simple Drawing

MONDAY, APRIL 20, 2009 OpenGL ES From the Ground Up, Part 2: A Look at Simple Drawing Okay, there's still a lot of theory to talk about, but before we spend too much time getting bogged down in complex math or difficult concepts, let's get our feet w

《OpenGL编程指南(原书第9版)》——3.3 顶点规范

3.3 顶点规范 现在我们已经在缓存中存储了数据,并且知道如何编写一个基本的顶点着色器,因此我们有必要将数据传递到着色器当中.我们已经了解顶点数组对象(vertex array object)的概念,它包含数据的位置和布局信息,以及类似glVertexAttribPointer()的一系列函数.现在,我们将更深入地了解顶点规范的相关内容.glVertexAttribPointer()的其他变种函数,以及如何设置一些非浮点数或者还没有启用的顶点属性数据.3.3.1 深入讨论VertexAttrib