标签: opengl

在简单的OpenGL应用程序中"访问冲突读取位置0x000000000"

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

IDE快照

码:

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)

c opengl

0
推荐指数
1
解决办法
4256
查看次数

OpenGL子窗口不会同时响应

我有一个问题,我正在使用过剩(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)

c++ opengl glut codeblocks viewport

0
推荐指数
1
解决办法
929
查看次数

在openGL中加载图像

我目前正在学习如何在openGL中加载和使用图像.我尝试了很多教程的例子.许多教程都使用了一个函数:LoadBMP或其他东西.我使用的标头未声明此功能.

你需要一个appart标题来加载图像吗?我查看了openGL维基百科,他们说有3个这样的标题.

或者我错了吗?你需要openGL 3.0或更高版本才能加载图片吗?

c++ opengl glut textures image

0
推荐指数
1
解决办法
1万
查看次数

C++ OpenGL - 颜色

我正在尝试绘制一个8位风格的游戏角色(来自塞尔达的链接),因为我正在练习OpenGL.我从他的脸开始,这是右边的大方块,并且他的眼睛是他脸部开始右边两个街区的眼睛......(6个街区,最左边的2个是眼睛)

眼睛的顶部(绿色块上方的块)应该是深绿色(参见代码),但它仍然采用第一个较大块(面部)的颜色.

我希望这是有道理的......请看这张图: 8位字符

我为什么要改变它的颜色呢?

我假设我需要做更多的事情才能接受RGB颜色?glColor3f(29, 137, 59);...

c++ opengl

0
推荐指数
1
解决办法
737
查看次数

Xcode 4.5 - OpenGL glEnable(GL_DEPTH_TEST)EXC_BAD_ACCESS

在我尝试学习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)

opengl glut osx-mountain-lion xcode4.5

0
推荐指数
1
解决办法
2105
查看次数

地形纹理

有没有办法以渐变的方式混合2个纹理?恩.第一个纹理从顶部开始,然后到达底部,第二个纹理从底部开始并向上移动.我想让它们像渐变中那样松散不透明,以创建平滑的连接.可能吗?

也许有其他方法来创建这样的纹理?问题是我的地形高度差异看起来不太好 - 在一个方形区域,一个三角形的纹理与另一个三角形不同.

opengl textures texturing texture-mapping

0
推荐指数
1
解决办法
677
查看次数

OpenGL - 将向量传递给glDrawElements()

我正在尝试将一个向量传递给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)

opengl vector

0
推荐指数
1
解决办法
1577
查看次数

即使glfwInit()返回1,也无法使GLFW正常工作

我已经设置了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)

c++ opengl graphics glfw

0
推荐指数
1
解决办法
906
查看次数

将背景颜色设置为纹理

所以在openGL中,当我调用glClearColor()时,有没有办法将背景颜色设置为纹理而不是将其设置为静态颜色?或者除了glClearColor()之外还有另一种方法吗?

opengl graphics background colors

0
推荐指数
1
解决办法
864
查看次数

opengl为什么我的矩形如此大而倾斜?

我有一个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)

c++ opengl

0
推荐指数
1
解决办法
559
查看次数