标签: opengl

glDrawArrays()不起作用

我尝试使用glVertexPointer,glColorPointer和glDrawArrays渲染简单三角形,但它仍然不起作用.还有glBegin的版本,它可以工作,所以顶点没有错误.

void GlWindow::paintGL() {

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glLoadIdentity();

    glTranslated(0,-0.5,-1.0);

    GLfloat object[] = {
        -length/5, 0.0, 0.0,
        length/5, 0.0, 0.0,
        0.0, 1.0, 0.0
    };

    GLfloat colors[] = {
        0.0, 1.0, 0.0,
        0.0, 1.0, 0.0,
        0.0, 1.0, 0.0
    };


    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);

    glVertexPointer(3, GL_FLOAT, 0, object);
    glColorPointer(3, GL_FLOAT, 0, colors);

    glDrawArrays(GL_TRIANGLES, 0, 1);

    glDisableClientState(GL_VERTEX_ARRAY);
    glDisableClientState(GL_COLOR_ARRAY);


    /*
    glColor3f(0.0, 1.0, 0.0);

    glBegin(GL_TRIANGLES);
    glVertex3f(-length/5, 0.0, 0.0);
    glVertex3f(length/5, 0.0, 0.0);
    glVertex3f(0.0, 1.0, 0.0);
    glEnd();
    */
    glFlush();

}
Run Code Online (Sandbox Code Playgroud)

opengl

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

Shader类中的语法错误?

我有编译程序的问题,我找不到任何错误.有问题的代码和错误消息如下所示:

我的错误消息:

- 错误2错误C4430:缺少类型说明符 - 假定为int.注意:C++不支持默认int C:\用户\ codasm \桌面\诺威projekty\glfwframework1\system.h中9 1 GLFWFramework1

- 错误1错误C2143:语法错误:缺少';' 在' 'c:\ users\codasm\desktop \nowe projekty\glfwframework1\system.h之前9 1 GLFWFramework1*

将我链接到System.h第9行的错误消息,我不明白什么是错的:

Shader* shader;
Run Code Online (Sandbox Code Playgroud)

system.h中:

#ifndef System_h
#define System_h

#include "Core.h"

class System
{
    GLFWwindow* window;
    Shader* shader;
    // GLuint shader;
    GLenum error;
    GLuint VAO, VBO, TBO;
  vector<vec3> vertices;
    vector<vec2> uvs;
    vector<vec3> normals;
 public:
    System();
    ~System();
  bool InitWindow();
    bool InitExtensions();
    bool InitShaders();
    bool InitVertices();
    bool InitTextures();
    bool InitModels();

    void Resize(GLFWwindow* window);
    void BeginScene();
    void EndScene(GLFWwindow* window);
    void Display(GLFWwindow*);

    void Run();

    void …
Run Code Online (Sandbox Code Playgroud)

c++ opengl

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

什么opengl命令将rambuffer上传到视频纹理

哪个命令将ram像素缓冲区准确上传到视频内存中的纹理?

这是glTexImage2D(...)?也许或其他什么?

如果我有一些纹理,并想要更改RAM缓冲区内容我可以用什么命令将其转移到视频卡?

我可以用于此目的?

opengl textures

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

OpenGL深度无法按预期工作

我用OpenGL它在屏幕上绘制一些内容.

这是初始化:

glViewport(0, 0, width, height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, width, height, 0, 10, -10);
glMatrixMode(GL_MODELVIEW);
Run Code Online (Sandbox Code Playgroud)

然后我使用这个绘制对象:

void draw(...)
{
    glEnable(GL_TEXTURE_2D);
    glEnable(GL_BLEND);
    glBegin(GL_QUADS);  //Begining the cube's drawing
    {
        glTexCoord3f(tu1, tv1, 1);  glVertex3f(offset,      _y, _z);
        glTexCoord3f(tu2, tv1, 1);  glVertex3f(offset + w,  _y, _z);
        glTexCoord3f(tu2, tv2, 1);  glVertex3f(offset + w,  _y + h,  _z);
        glTexCoord3f(tu1, tv2, 1);  glVertex3f(offset,      _y + h,  _z);
    }
    glEnd();    
    glDisable(GL_BLEND);
glDisable(GL_TEXTURE_2D);
}
Run Code Online (Sandbox Code Playgroud)

但深度不受尊重(用很多_z值测试).它随着呼叫的顺序而变化,越近将是最后绘制的.

如果我先画出粉红色条:

在此输入图像描述

如果我在奶油条后绘制粉红色条:

在此输入图像描述

c++ opengl 3d depth

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

GLSL语法错误:"in"解析错误

我正在尝试在我的程序中使用着色器,但我得到了非常奇怪的错误...

Vertex shader failed to compile with the following error
ERROR: 0:6: error(#132) Syntax error: "in" parse error
ERROR: error(#273) 1 compilation errors.  No code generated
Run Code Online (Sandbox Code Playgroud)

我认为问题在于文件读取,但在尝试了很多方法后,它仍然无法正常工作.

所以这是我的代码:

bool ShaderProgram::LoadShaderFile(const char* shader_path, GLuint& shader_id)
{
    ifstream oFileStream(shader_path);
    if(oFileStream)
    {
        // Load shader code
        string sShaderSource;
        sShaderSource.assign((istreambuf_iterator<char> (oFileStream) ), istreambuf_iterator<char> () );

        // Forward shader code to OGL
        const GLchar* chShaderSource = sShaderSource.c_str() + '\0';
        printf("%s", chShaderSource);
        glShaderSource(shader_id, 1, (const GLchar**) &chShaderSource, NULL);


        return true;
    }
    else
        return false;

}
Run Code Online (Sandbox Code Playgroud)

我的着色器: …

c++ opengl shader glsl parse-error

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

与OpenGL中的martix堆栈混淆?

我正在使用Lazy Foo的教程.我发现glPushMatrix()和glPopMatrix()函数非常混乱.我需要有人来解释如何存储矩阵,如何激活其中一个(如果这就是你所说的)以及来自Lazy Foo网站的代码:

void render() 
{ 
//Clear color buffer 
glClear( GL_COLOR_BUFFER_BIT ); 

//Pop default matrix onto current matrix 
glMatrixMode( GL_MODELVIEW ); 
glPopMatrix(); 

//Save default matrix again 
glPushMatrix();
Run Code Online (Sandbox Code Playgroud)

"打开"然后恢复矩阵服务的目的是什么?

c++ opengl matrix

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

gluPerspective不工作

我使用gluPerspective主要增加绘制距离,但它似乎不起作用.

这是它在我的代码中显示的方式:

gluPerspective(0, 70/70, 0, 4333);
Run Code Online (Sandbox Code Playgroud)

ratio:窗口Width和Height都是700,它们是常数,如果想知道的话.

fovy:我把0,因为,"他们"说使用45是非常好画,但它停止在屏幕上绘图.

这是完整的代码:

#include <Windows.h>
#include <gl\GL.h>
#include <gl/glut.h>

    WNDCLASSEX wclass;
    MSG msg;
    HWND hwnd;
    HDC hdc;

    HDC p_hdc;

    float t;
    int red, green, blue, x, y, z;
    void update()
    {
        RECT rec;
        GetClientRect(hwnd, &rec);
        InvalidateRect(hwnd, &rec, false);
        UpdateWindow(hwnd);
        t += 0.5f;
    }
    void game()
    {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        glClearColor(0, 0, 0, 0);
        float norm = 1;
        float z = 0;
        red = 255;
        green = 255;
        glPushMatrix();
        glRotatef(t, 0, 1, 1);
        glBegin(GL_TRIANGLES);
        glColor3f(255, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl drawing

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

OpenGL 1.1和当前4.3之间的主要区别是什么?

对于大学,我们通过JOGL/Java学习使用OpenGL 1.1的3D图形,它仍然是相当简单的东西:

  • 标准绘制方法(GL_TRIANGLE_STRIP,GL_LINES)
  • 使用立方贝塞尔曲线
  • 绘制赛道/使用矢量
  • 使对象(机器人)具有动画效果
  • 使用2D纹理

在本课程结束后,我想继续3D图形编程,我还有一些尝试,似乎我只能通过构建自己的(简单)引擎来学习它,所以就这样吧.

我们在大学使用OpenGL 1.1,因为它仍然相当简单和基础,但我认为该行业已经是4.3版了?

有人可以说出主要的差异,可能是功能,但对编程方法更感兴趣吗?
我注意到OpenGL 1.1中很多东西都是在CPU端完成的,尽管它已经支持GPU了.
同样是创建漂亮游戏所需的着色器语言,或者为什么它们经常被使用,我发现它们(在我的空闲时间)异常难以理解.

java opengl

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

为什么我的OpenGL纹理透明?

我在OpenGL中有一个地形,我使用GLSL mix()函数组合了两个纹理.这是我正在使用的纹理. 在此输入图像描述

现在我能够组合和混合这两个纹理,但出于某种原因,当我在地形上渲染纹理时,地形变得透明.我先渲染LHS纹理,然后用alpha通道渲染RHS纹理,我不明白为什么它是透明的.

在此输入图像描述 这是一个有趣的事实,在截图中,你可以看到在Nvidia GPU上渲染时的地形结果,当我在interl HD 3k上渲染相同的东西时,我得到了不同的结果.这个结果是它应该如何,在下面的截图中没有任何透明.

在此输入图像描述

这是我的片段着色器代码..

void main() 
{
vec4 dryTex   = texture( u_dryTex, vs_texCoord *1 );
vec4 grassTex = texture( u_grassTex, vs_texCoord *1 );
vec4 texColor1= mix(dryTex, grassTex , grassTex.a);   
out_fragColor = texColor1;
}
Run Code Online (Sandbox Code Playgroud)

c++ opengl textures glsl texture-mapping

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

没有SDL窗口的SDL_Events

我想使用SDL来处理我的事件,但我正在使用OpenGL来处理图形.有没有办法使用SDL的事件处理,即使我实际上没有任何活动的SDL窗口?

c++ opengl sdl

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

标签 统计

opengl ×10

c++ ×7

glsl ×2

textures ×2

3d ×1

depth ×1

drawing ×1

java ×1

matrix ×1

parse-error ×1

sdl ×1

shader ×1

texture-mapping ×1