当使用缓冲区对象存储顶点数组时,我在openGL中遇到问题.当我运行代码时,会出现一个窗口,显示消息" 访问冲突读取位置0x000000000 ",当我将光标移动到glGenBuufers函数旁边的箭头时,我看到描述:这是当该线程从当前函数返回时执行的下一个语句.

码:
int frame=0;
void display();
void datasource();
GLuint vbo;
void datasource()
{
GLfloat vertex1[]={-1.000000 ,0.500000 ,-0.700000 ,0.500000 ,-1.000000 ,0.800000 ,-0.700000 ,0.800000 ,-0.400000 ,0.500000 ,-0.100000 ,0.500000 ,-0.400000 ,0.800000 ,-0.100000 ,0.200000 ,0.500000 ,0.500000 ,0.500000 ,0.200000 ,0.800000 ,0.500000,0.800000 ,0.800000 ,0.800000 ,0.500000 ,1.100000 ,0.500000 ,0.800000 ,0.800000 ,1.100000,0.800000 };
glGenBuffers(1,&vbo);
glBindBuffer(GL_ARRAY_BUFFER,vbo);
glBufferData(GL_ARRAY_BUFFER,sizeof(vertex1),vertex1,GL_STATIC_DRAW);
}
void init(int arc,char **arch)
{
glutInit(&arc,arch);
glutInitWindowSize(800,800);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutCreateWindow("chess");
glClearColor(0.0,0.0,0.0,0.0);
glutDisplayFunc(display);
}
int main(int arc,char **arch)
{
init(arc,arch);
datasource();
glutMainLoop();
return 0;
} …Run Code Online (Sandbox Code Playgroud) 我有一个问题,我正在使用过剩(openGL实用工具包).我正在主窗口制作一个子窗口.主窗口显示一个简单的图形,子窗口显示另一个视图中的图形.该图旋转,因此应始终重新显示主窗口和子窗口.
但是这两个中只有一个显示旋转的数字.因此,当我启动程序时,主窗口中的图形旋转但在子窗口中它不旋转,它只是静止不动.
当我在子窗口中移动鼠标并按任意键时,角色会发生变化,因此图形在子窗口中旋转并在主窗口中静止不动.
如何让它们同时显示.我按照灯塔的教程,但它没有给我一个答案.我必须对我的视口做些什么吗?
* GLUT Shapes Demo
*
* Written by Nigel Stewart November 2003
*
* This program is test harness for the sphere, cone
* and torus shapes in GLUT.
*
* Spinning wireframe and smooth shaded shapes are
* displayed until the ESC or q key is pressed. The
* number of geometry stacks and slices can be adjusted
* using the + and - keys.
*/
#include <windows.h>
#ifdef __APPLE__
#include <GLUT/glut.h>
#else
#include <GL/glut.h> …Run Code Online (Sandbox Code Playgroud) 我目前正在学习如何在openGL中加载和使用图像.我尝试了很多教程的例子.许多教程都使用了一个函数:LoadBMP或其他东西.我使用的标头未声明此功能.
你需要一个appart标题来加载图像吗?我查看了openGL维基百科,他们说有3个这样的标题.
或者我错了吗?你需要openGL 3.0或更高版本才能加载图片吗?
我正在尝试绘制一个8位风格的游戏角色(来自塞尔达的链接),因为我正在练习OpenGL.我从他的脸开始,这是右边的大方块,并且他的眼睛是他脸部开始右边两个街区的眼睛......(6个街区,最左边的2个是眼睛)
眼睛的顶部(绿色块上方的块)应该是深绿色(参见代码),但它仍然采用第一个较大块(面部)的颜色.
我希望这是有道理的......请看这张图:

我为什么要改变它的颜色呢?
我假设我需要做更多的事情才能接受RGB颜色?glColor3f(29, 137, 59);...
在我尝试学习CG和OpenGL之后,我找到了"交互式计算机图形学"这本书,我认为这对初学者来说是一个很好的.现在,我正在尝试按照书中的理论创建3D中所谓的Sierpinski垫片.该项目位于Xcode 4.5中,可以很好地构建并运行,但是当它到达该glEnable(GL_DEPTH_TEST)行时,它会崩溃并且Xcode会显示错误Exc_bad_access.
这是我的代码的样子:
//
// main.cpp
// SierpinskiGasket
//
// Created by Federico Martinez on 24.01.13.
// Copyright (c) 2013 ParallelDev. All rights reserved.
//
#include "Angel.h"
const int NumTimesToSubdivide = 3;
const int NumTriangles = 27; // 3^5 triangles generated
const int NumVertices = 3 * NumTriangles;
vec3 points[NumVertices];
vec3 base_colors[4] = {
vec3(1.0, 0.0, 0.0),
vec3(0.0, 1.0, 0.0),
vec3(0.0, 0.0, 1.0),
vec3(0.0, 0.0, 0.0)
};
vec3 colors[NumVertices];
int Index = …Run Code Online (Sandbox Code Playgroud) 有没有办法以渐变的方式混合2个纹理?恩.第一个纹理从顶部开始,然后到达底部,第二个纹理从底部开始并向上移动.我想让它们像渐变中那样松散不透明,以创建平滑的连接.可能吗?
也许有其他方法来创建这样的纹理?问题是我的地形高度差异看起来不太好 - 在一个方形区域,一个三角形的纹理与另一个三角形不同.
我正在尝试将一个向量传递给glDrawElements()的最后一个参数.如果我使用数组,它工作正常.但是,当我切换到矢量时,它只渲染了一部分对象.
这工作得很好:
//TA_CartesianSys.h
class TA_CartesianSys
{
private:
int drawOrder[86];
//the rest of the class
}
//---------------------------------
//TA_CartesianSys.cpp
TA_CartesianSys::TA_CartesianSys()
{
GLfloat CartesianVertices[] = { ... };
int tempOrder[] = { ... };
for(int i = 0; i < sizeof(tempOrder) / sizeof(int); i++)
{
drawOrder[i] = tempOrder[i];
}
//Code to generate and bind vertex array and buffer
glDrawElements(GL_LINES, sizeof(drawOrder)/sizeof(int), GL_UNSIGNED_INT, drawOrder);
}
Run Code Online (Sandbox Code Playgroud)
它按预期工作,这就是它的样子:

现在,我决定使用vector而不是array来进行drawOrder [].这是新代码:
//TA_CartesianSys.h
class TA_CartesianSys
{
private:
std::vector<int> drawOrder; //***NOTE: This is the change
//the rest of the class …Run Code Online (Sandbox Code Playgroud) 我已经设置了GLFW库,根据它的用户指南,我应该使用glfwInit()函数来初始化它.之后我应该能够 - 例如 - 在我按下键盘上的键后调用回调函数,但是这个函数没有被调用,所以我尝试了更简单的东西 - 获得鼠标位置.但它也不起作用,所以我认为我的整个GLFW出了问题.
这是我的应用程序的主循环:
while (!m_exit)
{
int x, y;
glfwGetMousePos(&x, &y);
glfwPollEvents();
gameCycle(); // Do one cycle
while (PeekMessage (&msg, NULL, 0, 0, PM_NOREMOVE))
{
// Check the pressence of commands
if (!GetMessage (&msg, NULL, 0, 0))
{
return msg.wParam; // Hand the control on to system
}
TranslateMessage (&msg);
DispatchMessage (&msg);
}
}
Run Code Online (Sandbox Code Playgroud)
在此循环之前,我初始化我的GLFW:
// Initialize GLFW
if( !glfwInit() )
{
exit( EXIT_FAILURE );
}
glfwSetKeyCallback(processKeys);
// Main …Run Code Online (Sandbox Code Playgroud) 所以在openGL中,当我调用glClearColor()时,有没有办法将背景颜色设置为纹理而不是将其设置为静态颜色?或者除了glClearColor()之外还有另一种方法吗?
我有一个opengl项目,我只是试图在屏幕上绘制一个红色矩形,问题是1)它很大,几乎占据整个屏幕,2)它倾斜.我是opengl的新手,所以我不了解坐标系,以及一些函数的功能,例如glOrtho()函数.
这是代码:
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glBegin(GL_QUADS);
glColor3f(1, 0, 0); // NOT SURE WHERE THIS STARTS, AND HOW THE COORDINATES WORK
glVertex2f(-1.0f, 1.0f);
glVertex2f( 1.0f, 1.0f);
glVertex2f( 1.0f,-1.0f);
glVertex2f(-1.0f,-1.0f);
glEnd();
glFlush();
}
void init()
{
glClearColor(0.0, 0.0, 0.0, 1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 10.0, 0, 10.0, -1.0, 1.0); //What does this do and how does it's coordinates work?
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(30.0, 1.0, 1.0, 1.0);
glEnable(GL_DEPTH_TEST);
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitWindowSize(600, 600);
glutInitWindowPosition(250, 250);
glutInitDisplayMode(GLUT_RGB …Run Code Online (Sandbox Code Playgroud)