每当我调用一个函数来交换缓冲区时,我都会glDebugMessageCallback说出很多错误:
glVertex2f已从OpenGL Core上下文(GL_INVALID_OPERATION)中删除
我已经尝试过同时使用GLFW和freeglut,但都无法正常工作。
我glVertex2f当然没用过。我什至甚至删除了所有渲染代码,以查看是否可以找到导致该问题的原因,但是错误仍然存在,就在glutSwapBuffers/ 之后glfwSwapBuffers。
使用单缓冲也不会导致任何错误。
我已经将上下文初始化为4.3,核心配置文件,并标记了前向兼容性。
目前我的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) 我有点惊讶.我一直在调试我的代码几个小时,而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) 我很难理解如何在小行星克隆中移动我的宇宙飞船.我可以沿着世界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) 我是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) 我正在尝试做最简单的事情,但我得到一个'矢量下标超出范围'的错误!我不明白为什么,因为我检查确保不会发生.它出现的唯一功能是addTexture一个.
#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)
#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) 我正在使用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) 我正在通过使用发现着色器,并且遇到了一个奇怪的问题.
我需要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继续他的建议,扩展的名称确实出现在输出中.
我正在尝试为Go中的OpenGL项目编写一个截图函数,我正在使用此处的OpenGL绑定:
这是我用来制作屏幕截图的代码,或者说,这就是我正在做的事情:
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为字节数组?
我按照指南绘制了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)