小编gen*_*ult的帖子

在C++中声明头文件中的全局结构

我在头文件中创建了一个结构,如下所示:

typedef struct
{
    GLfloat lgtR, lgtG, lgtB, lgtA;
    GLfloat x, y, z;
    bool islight;
    GLfloat width, height, depth;
    GLenum lightn;
    particle prt;
    int maxprt;
} emitter;
Run Code Online (Sandbox Code Playgroud)

这没有问题.

但是,在那个特定的头文件中,我想声明一个可以在所有函数中使用的全局发射器,它不是主源文件的一部分:

// header.h global declaration

emmiter currentEmit;

GLvoid glSetEmitter(emitter emitter)
{
    currentEmit = emitter;
}
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试这个时,我得到了很多"错误C2228:'.variable'的左边必须有class/struct/union,所以我假设它根本没有声明我的结构.

有没有办法在头文件中全局声明该结构,如果是这样,是否还有一种方法可以防止它成为其他.cpp文件的一部分?

c++ opengl structure declaration global-variables

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

OpenGL - 使用glDrawElements的着色器

我很好奇你如何指定使用glDrawElements()渲染时使用的着色器.它是使用绑定的最后一个着色器吗?或者你必须使用其他命令.

总结一下:当我使用glDrawElements()时,如何指定使用哪个着色器,即将在我渲染的VBO中的三角形上使用的着色器.

opengl shader render

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

OpenGL在绘制三角形之前我该做什么?

我在那里发现的大部分教程,指南和书籍都与OpenGL有关,解释了如何绘制三角形并初始化OpenGL.没关系.但当他们试图解释它时,他们只列出了一堆函数和参数,如:

glClear()
glClearColor()
glBegin()
glEnd()
...
Run Code Online (Sandbox Code Playgroud)

由于我不擅长通过记忆学习东西,我总是需要回答"为什么我们这样做?" 所以我会编写那么多函数,因为我记得在做其他事情之前我必须先设置一些东西,所以不要因为教程告诉了我.

可以请有人向我解释一下,在开始使用glBegin()和绘制内容之前,我需要为OpenGL定义什么(只有纯OpenGL,我使用SFML作为背景库,但这无关紧要)glEnd().

示例答案:

您必须首先告诉OpenGL清除屏幕所需的颜色.因为在我们开始绘制当前帧之前需要先清除每个帧...

c++ opengl

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

一个OpenGL qeustion:为什么glutSwapBuffer()函数不起作用?

这段代码来自红皮书,例2-15(嗯,代码不完全是书中的代码).照顾我记下的那张纸条.

#include <fstream>
#include <stdlib.h>
#include <GL/glew.h>
#include <GL/glut.h>
#pragma comment(lib,"glew32.lib")
using namespace std;
#define BUFFER_OFFSET(offset) ((GLubyte *)NULL+offset)
#define XStart              -0.8
#define XEnd                0.8
#define YStart              -0.8
#define YEnd                0.8
#define NumXPoints          11
#define NumYPoints          11
#define NumPoints           (NumXPoints * NumYPoints)
#define NumPointsPerStrip   (2*NumXPoints)
#define NumStrips           (NumYPoints-1)
#define RestartIndex        0xffff

void display(void)
{
    int i,start;
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glColor3f(1,1,1);
    glDrawElements(GL_TRIANGLE_STRIP,NumStrips*(NumPointsPerStrip+1),GL_UNSIGNED_SHORT,BUFFER_OFFSET(0));
    //glFlush();//it works,show a white square with black backgroud
    glutSwapBuffers();///it doesn't work,show what tha area looked like before

}

void init …
Run Code Online (Sandbox Code Playgroud)

opengl

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

Opengl cpp代码在windows和mac上运行?

我想知道是否有任何if语法可用于在mac和windows上运行opengl c ++代码.更具体地说,在代码的开头,我可以设置一个if条件来确定代码是在mac(通常是xcode)还是windows(通常是visual c ++)上运行,并相应地包含头文件.

c++ windows opengl macos if-statement

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

openGL卷渲染和显示更新在不同的线程中

我正在使用openGL和"freeglut"库进行体积渲染和显示.在主线程中,我初始化openGL窗口,然后逐帧获取体积数据,体积渲染在获取一个体数据后完成.这很好用,但需要很长时间.是否有可能继续在主线程中初始化openGL窗口,并在另一个线程中进行体积渲染和显示?我检查了wglMakeCurrent,它没有更新主线程中初始化的窗口.

opengl multithreading rendering volume

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

不得不改变纹理的精度,为什么?

我在片段着色器上做了一些工作,允许纹理渲染和颜色渲染.在我做了更改后,我的所有纹理都非常像素化(就像一个旧的8位游戏),我不得不提高纹理坐标的精度到中等.这也给我带来了性能影响.我只是不明白为什么我突然不得不首先改变精度.

这是"原始"着色器:

varying lowp vec2 TexCoordOut;
uniform sampler2D Texture;

uniform lowp float opacity;

void main(void) {
    gl_FragColor = opacity * texture2D(Texture, TexCoordOut);
}
Run Code Online (Sandbox Code Playgroud)

这是着色器在更改后的样子:

varying mediump vec2 TexCoordOut;
uniform sampler2D Texture;

uniform lowp vec4 color;
uniform lowp float opacity;
uniform int colorRender;

void main(void) {
    if (colorRender == 1)
    {
        gl_FragColor = color;
    } else {
        gl_FragColor = opacity * texture2D(Texture, TexCoordOut);
    }
}
Run Code Online (Sandbox Code Playgroud)

shader opengl-es glsl

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

在OpenGL中添加阴影

我有一个非常简单的代码,只是绘制一个建筑物,我想添加建筑物的阴影.我已经尝试了很多代码示例,但要么它们太复杂了,而且绘制了一些对象.或者太模糊了 我怎样才能看到建筑的阴影?

#include "GLee/GLee.h" //GL header file, including extensions
#include "glut.h"
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include "tga.h"
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>
char  g_SelectedColor = 'w';
int   g_Width;
int   g_Height;
int a=0.0 ,b=0.0, c=500, d=0.0, e=0.0, f=0.0,g=0.0,h=1.0,i=0.0;

static int rotationAngle=0;
void init();
void myMouseFunction( int button, int state, int mouseX, int mouseY );
void myKeyboardFunction( unsigned char key, int mouseX, int mouseY );
void Reshape( int width, int height );
void timer( int val );
void display(); …
Run Code Online (Sandbox Code Playgroud)

c++ opengl graphics shadow

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

Xcode 4.5问题与简单的OpenGL C++代码

我在Xcode中有一个简单的OpenGL项目.

升级到4.5后,Xcode开始以一种奇怪的方式运行

在以下行中

#include <fstream.h>
Run Code Online (Sandbox Code Playgroud)

编译失败,出现以下错误消息:未找到词法或预处理器问题'fstream.h'文件.

用于在Xcode 4.2中成功编译的相同代码

将线路更改为

#include <c++/4.2.1/backward/fstream.h>
Run Code Online (Sandbox Code Playgroud)

修复了问题,但生成了其他一些编译错误.

c++ opengl xcode

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

为什么要在渲染形状后绘制字符串,我为什么需要禁用GL_TEXTURE_2D?

我正在使用Slick2D库来向屏幕呈现文本,但为了呈现像Rect这样的gl形状,我需要先禁用GL_TEXTURE_2D.我只是好奇为什么需要它.为什么GL_TEXTURE_2D禁用形状渲染?

java opengl lwjgl slick2d

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