标签: opengl

与核心配置文件交换缓冲区使用无效的操作

每当我调用一个函数来交换缓冲区时,我都会glDebugMessageCallback说出很多错误:

glVertex2f已从OpenGL Core上下文(GL_INVALID_OPERATION)中删除

我已经尝试过同时使用GLFW和freeglut,但都无法正常工作。

glVertex2f当然没用过。我什至甚至删除了所有渲染代码,以查看是否可以找到导致该问题的原因,但是错误仍然存​​在,就在glutSwapBuffers/ 之后glfwSwapBuffers
使用单缓冲也不会导致任何错误。

我已经将上下文初始化为4.3,核心配置文件,并标记了前向兼容性。

c++ opengl glut freeglut glfw

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

澄清glFrustum,以及为什么我看不到图像

目前我的glFrustum设置为

glFrustum(0, 100.0, 0, 100.0, -50, 50);
Run Code Online (Sandbox Code Playgroud)

我的图像是一个矩形立方体,尺寸:当形状的尺寸小于观察盒时,为什么我看不到图像?

//top
    glBegin(GL_POLYGON);
        glVertex3f(25, 60, 25);
        glVertex3f(75, 60, 25);
        glVertex3f(75, 60, -25);
        glVertex3f(25, 60, -25);
    glEnd();

    //bottom
    glBegin(GL_POLYGON);
        glVertex3f(25, 55, 25);
        glVertex3f(75, 55, 25);
        glVertex3f(75, 55, -25);
        glVertex3f(25, 55, -25);
    glEnd();

    //front
    glBegin(GL_POLYGON);
        glVertex3f(25, 55, 25);
        glVertex3f(75, 55, 25);
        glVertex3f(75, 60, 25);
        glVertex3f(25, 60, 25);
    glEnd();

    //back
    glBegin(GL_POLYGON);
        glVertex3f(25, 60, -25);
        glVertex3f(75, 60, -25);
        glVertex3f(75, 55, -25);
        glVertex3f(25, 55, -25);
    glEnd();
Run Code Online (Sandbox Code Playgroud)

c++ opengl graphics dimension

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

GLM乘法顺序

我有点惊讶.我一直在调试我的代码几个小时,而GLM似乎放弃了我.我正在努力完成以下两个实例:

....
cout << "multiplying A:" << endl;
displayMatrix(node->wMatrix);

cout << "and B:" << endl;
displayMatrix((node->children)[i]->wMatrix);

//switch order!
mat4 temp = (node->children)[i]->wMatrix * node->wMatrix;

cout << "Get result as:" << endl;
displayMatrix(temp);
...
Run Code Online (Sandbox Code Playgroud)

displayMatrix方法如下:

void displayMatrix(mat4 &m)
{
    cout << m[0][0] << "  " << m[0][1] << "  " << m[0][2] << "  " << m[0][3] << endl;
    cout << m[1][0] << "  " << m[1][1] << "  " << m[1][2] << "  " << m[1][3] << endl;
    cout << …
Run Code Online (Sandbox Code Playgroud)

c++ opengl matrix glm-math

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

C++小行星克隆 - 宇宙飞船运动问题

我很难理解如何在小行星克隆中移动我的宇宙飞船.我可以沿着世界y轴​​移动它,但是当我旋转飞船时,它不会在它自己的相对y轴内向前移动.我已经评论了if语句用于宇宙飞船运动的代码.它接近update()方法的底部.谢谢你的建议.

#include "Game.h"

Game::Game() 
    : mUColorProgram(0)
    , mVColorProgram(0)
    , mAsteroid(NULL)
    , mSpaceship(NULL)
    , mManualRotation(0.0f)
    , mManualTranslation(0.0f, 0.0f, 0.0f)
    , mSpinnerAngle(0.0f)
    , mSpinnerAngularVelocity(glm::radians(90.0f))
    , mMinX(-1.0f)
    , mMinY(-1.0f)
    , mMaxX(1.0f)
    , mMaxY(1.0f)
    , mBouncerPosition(0.0f, 0.0f, 0.0f)
    , mBouncerVelocity(0.0f, 0.0f, 0.0f)
    , mMinScale(0.5f)
    , mMaxScale(5.0f)
    , mCurrScale(mMinScale)
    , mScalingSpeed(2.0f)
    , mBlendColor1(1.0f, 1.0f, 0.0f, 1.0f)
    , mBlendColor2(1.0f, 0.0f, 0.0f, 1.0f)
    , mAlpha(1.0f)
    , mBlendSpeed(-0.5f)
    , mBlendedColor(mAlpha * mBlendColor1 + (1 - mAlpha) * mBlendColor2)
{
    glsh::InitRandom();  // initialize random number generator

    mBouncerPosition.x = glsh::Random(mMinX, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl

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

传递给着色器的颜色不起作用

我是OpenGL的新手,并且有一个简单的程序,我现在正在搞乱.

我遇到的问题是当我传递一个数组来表示点的颜色时,颜色最终变成黑色.如果我只是在片段着色器中明确定义颜色,它可以正常工作,如果我在VAO中切换数据的索引,则三角形将移动到作为颜色的点.

我尝试使用API​​跟踪并获得以下内容:

6872: message: major api error 1282: GL_INVALID_OPERATION error generated. <program> is not a program object, or <shader> is not a shader object.
6872 @0 glAttachShader(program = 1, shader = 1)
6872: warning: glGetError(glAttachShader) = GL_INVALID_OPERATION
6876: message: major api error 1282: GL_INVALID_OPERATION error generated. Handle does not refer to the expected type of object (GL_SHADER_OBJECT_ARB).
6876 @0 glDeleteShader(shader = 1)
6876: warning: glGetError(glDeleteShader) = GL_INVALID_OPERATION
6878: message: major api error 1282: GL_INVALID_OPERATION error generated. Handle does not …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glfw opengl-3

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

为什么我得到'矢量下标超出范围'?

我正在尝试做最简单的事情,但我得到一个'矢量下标超出范围'的错误!我不明白为什么,因为我检查确保不会发生.它出现的唯一功能是addTexture一个.

TextureBank.h

#pragma once
#include "Disposable.h"
#include "Texture.h"
#include <vector>

class TextureBank: public Disposable
{
public:
    TextureBank();
    ~TextureBank();

    virtual void dispose();

    void addTexture(int location, Texture *tex);
    Texture *getTexture(int location);
private:
    std::vector<Texture*> textures;
};
Run Code Online (Sandbox Code Playgroud)

TextureBank.cpp

#include "TextureBank.h"


TextureBank::TextureBank()
{
}

void TextureBank::dispose() {
    for each (Texture* tex in textures)
    {
        if (tex != nullptr) {
            tex->dispose();
        }
    }
}

void TextureBank::addTexture(int location, Texture *tex) {
    if (location > textures.size() - 1) {
        textures.resize(location + 1, nullptr);
    }
    textures[location] = …
Run Code Online (Sandbox Code Playgroud)

c++ opengl

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

OpenGL纹理+闪电+混合麻烦

我正在使用OpenTK,我很难理解openGL启用功能的概念.透视矩阵在onResize函数中.

我想显示纹理.

我的渲染功能:

        GL.ClearColor(0.5f, 0.5f, 0.5f, 1.0f); 
        GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);
        GL.MatrixMode(MatrixMode.Modelview);
        GL.LoadIdentity();
        GL.Enable(EnableCap.Texture2D);
        GL.Enable(EnableCap.DepthTest);
        Ground.Draw();
Run Code Online (Sandbox Code Playgroud)

我的Ground.Draw()函数(sizeXZ.Z,sizeXZ.Y是常量):

        GL.PushMatrix();
        GL.Translate(new Vector3(-sizeXZ.X / 2, -1, sizeXZ.Y / 2));
        GL.BindTexture(TextureTarget.Texture2D, Textures.GetTextureId(textureName));
        GL.Begin(PrimitiveType.Quads);
        GL.Color3(1,1,1);
        GL.Normal3(0, 1, 0);
        GL.TexCoord2(1f, 1f); GL.Vertex3(0, 0, 0);
        GL.TexCoord2(1f, 0f); GL.Vertex3(sizeXZ.X, 0, 0);
        GL.TexCoord2(0f, 0f); GL.Vertex3(sizeXZ.X, 0, -sizeXZ.Y);
        GL.TexCoord2(0f, 1f); GL.Vertex3(0, 0, -sizeXZ.Y);
        GL.End();
        GL.PopMatrix();
Run Code Online (Sandbox Code Playgroud)

它显示了黑色非纹理四边形.当我添加一些光时,纹理会出现,但会消失一些四边形的颜色:

GL.BindTexture(TextureTarget.Texture2D, Textures.GetTextureId(textureName));
GL.Begin(PrimitiveType.Quads);
GL.Normal3(0, 0, 1);
if (true) GL.Color4(0,1,0,1); // it appears to be the background color, not green
if (false) GL.TexCoord2(1f, 0f); GL.Vertex3(0, 0, …
Run Code Online (Sandbox Code Playgroud)

c# opengl opentk

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

GLEW和我的着色器不同意 - 我是否有延伸?

我正在通过使用发现着色器,并且遇到了一个奇怪的问题.

我需要ARB_robustness片段着色器的扩展才能正常运行.GLEW肯定我有这个扩展:

assert(GLEW_ARB_robustness); // Passes
Run Code Online (Sandbox Code Playgroud)

...但是当我require在我的着色器中...

#extension GL_ARB_robustness : require
Run Code Online (Sandbox Code Playgroud)

...着色器编译器无法识别它.

0(3) : error C0202: extension ARB_robustness not supported
Run Code Online (Sandbox Code Playgroud)

GLEW已正确初始化,只要我不尝试使用该扩展,一切正常.

可能是这个问题的原因,我怎么能解决它?提前致谢.

更新:我在朋友的帮助下嘲笑我,我glxinfo继续他的建议,扩展的名称确实出现在输出中.

opengl glew glsl opengl-extensions

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

unsafe.Pointer到Go中的[]字节

我正在尝试为Go中的OpenGL项目编写一个截图函数,我正在使用此处的OpenGL绑定:

https://github.com/go-gl/glow

这是我用来制作屏幕截图的代码,或者说,这就是我正在做的事情:

    width, height := r.window.GetSize()
    pixels := make([]byte, 3*width*height)

    // Read the buffer into memory
    var buf unsafe.Pointer
    gl.PixelStorei(gl.UNPACK_ALIGNMENT, 1)
    gl.ReadPixels(0, 0, int32(width), int32(height), gl.RGB, gl.UNSIGNED_BYTE, buf)
    pixels = []byte(&buf) // <-- LINE 99
Run Code Online (Sandbox Code Playgroud)

这会在编译期间触发以下错误:

video\renderer.go:99: cannot convert &buf (type *unsafe.Pointer) to type []byte.
Run Code Online (Sandbox Code Playgroud)

如何转换unsafe.Pointer为字节数组?

arrays opengl pointers type-conversion go

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

从gluOrtho2D到3D

我按照指南绘制了2D的Lorenz系统.

我现在想要扩展我的项目并从2D切换到3D.据我所知,我必须用gluPerspective或glFrustum替换gluOrtho2D调用.不幸的是,无论我尝试什么都没用.这是我的初始化代码:

// set the background color
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);

/// set the foreground (pen) color
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);*/

// set the foreground (pen) color
glColor4f(1.0f, 1.0f, 1.0f, 0.02f);

// enable blending
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

// enable point smoothing
glEnable(GL_POINT_SMOOTH);
glPointSize(1.0f);

// set up the viewport
glViewport(0, 0, 400, 400);

// set up the projection matrix (the camera)
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
    //gluOrtho2D(-2.0f, 2.0f, -2.0f, 2.0f);
gluPerspective(45.0f, 1.0f, 0.1f, 100.0f); //Sets the frustum to perspective mode


// set …
Run Code Online (Sandbox Code Playgroud)

opengl frustum

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