小编gen*_*ult的帖子

opengl过剩使得hud

我正在创建一个3D小行星游戏,你可以通过一些小行星导航太空船.当我点击小行星时,我会摧毁它,我希望在小行星被摧毁之前添加一个像你在科幻电影中看到的一样的目标锁定和这样的东西.选择小行星,使hud生动,破坏小行星.实现这一目标的最佳方法是什么?我应该简单地创建一些平面并仅在需要时渲染它们,或者是否有另一种方法,例如当您创建文本并设置新投影以在主窗口上渲染文本时.

c++ opengl glut

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

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万
查看次数

如何在 GLSL 中使用 RGBA16?

我正在尝试在 GLSL 中绘制一些深度图之王,为此我至少需要一个 10 位通道。我决定使用 GL_R16 或 GL_RGBA12 - 它们是最接近的,并且 GL_R16 将花费更少的 GPU 内存(因为它会......对吧?)。

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA12, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, 0);
Run Code Online (Sandbox Code Playgroud)

问题来了:如何让 GLSL 正确使用它?Sampler2D 将其转换为经典的 8 位 RGBA...钳位怎么样?在 GLSL 中,每个分量颜色都归一化为 [0,1] - 16 位是否相同?我只想知道如何使用它。

c++ opengl shader glsl

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

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
查看次数

Opengl,C++ : 大量点

我目前正在开发一个程序,该程序将能够可视化沿向量场流动的平面上的点的演变。我已经完成了粘贴在下面的第一个版本。当运行具有大量点的程序时,似乎只有最后说的 30000 个点被绘制到窗口中。我希望能够绘制大约 1000000 点,所以我离得很远。

我试过喜欢迭代次数(迭代变量 - 控制点数),在这里它表现得很好。然而,当它大幅增加时,第一部分不再被绘制。

#include <iostream>
#include <stdio.h>
#include <math.h>
//#include <gsl/gsl_math.h>
//#include <gsl/gsl_sf.h>
#include <GL/freeglut.h>
#include <GL/gl.h>

using namespace std;

//Initial iterations to make the system settle:
int initIter=0;
//Iterations once system has settled:
int Iterations = 100000;
/**Starting point in time-phase-space (t,x,y,vx,vy).
For mathematical reasons the last two components should
always be 0**/
float TPS[5]={0,0.00,0.100,0.00,0.000};
//Timestep:
float dt=0.001;




/**The Step function make one Picard
iteration **/
float * Step(float * Arr){
static float NewTPS[5]; …
Run Code Online (Sandbox Code Playgroud)

c++ opengl vertex

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

OpenGL纹理搞砸了

这是我加载纹理的代码.我试图使用此示例加载文件; 它是一个gif文件.我可以问一下是否可以加载gif文件,还是只能加载原始文件?

void setUpTextures()
{

    printf("Set up Textures\n");
    //This is the array that will contain the image color information.
    // 3 represents red, green and blue color info.
    // 512 is the height and width of texture.
    unsigned char earth[512 * 512 * 3];

    // This opens your image file.
    FILE* f = fopen("/Users/Raaj/Desktop/earth.gif", "r");
    if (f){
        printf("file loaded\n");
    }else{
        printf("no load\n");
        fclose(f);
        return;
    }

    fread(earth, 512 * 512 * 3, 1, f);
    fclose(f);


    glEnable(GL_TEXTURE_2D);

    //Here 1 is the texture …
Run Code Online (Sandbox Code Playgroud)

opengl

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

OpenGL:如何使用鼠标拖动图像并将其移动到该行

我想通过使用鼠标将图像拖动到一行,当图像接近该行时,图像将自动移动到该行,就像一些"floor planner"程序------------你创建墙壁将门拖到墙上,当门靠近墙壁时,门会自动出现在墙上.

OpenGL可以做到吗?

如果可以的话,谁能告诉我怎么样?如果不能,有人能告诉我怎么做吗?
给我举个例子.

c opengl

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

放大而不缩放图形

我(使用java slick2D库特别,但可能不会是这个问题的一个因素),学习OpenGL的2D.我发现我可以改变推动一个新的变换矩阵,例如将世界坐标转换为屏幕(视图)坐标.

我想使用它来缩放我的视图,增加对象之间的距离,但是一旦完成,我想在屏幕坐标中绘制图像和形状,如HUD.基本上,我希望坐标改变,但图形保持不变,所以我可以在每个比例上渲染自定义图像.

这可以通过一些聪明的转换或一些OpenGL选项来完成,而不是手动计算所有坐标吗?

opengl transformation scale

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

DrawToBitmap(DIB)中未显示OpenGL Win32纹理

我有一个实时OpenGL应用程序渲染一些纹理对象.我已经构建了一个函数来通过PFD_DRAW_TO_BITMAP将它渲染到DIB并将其复制到图像来制作渲染场景的内部屏幕截图.除了一种纹理外,它的效果非常好.这些是具有24bpp的JPG(因此每个R,G,B为8位).我可以加载它们并实时正确渲染,但不能渲染到DIB.对于其他纹理,效果很好.在虚拟机上测试我的应用程序时,我有相同的行为(WinXP,没有硬件加速!).这些特定的纹理甚至没有在实时渲染中显示.如果没有硬件加速,我猜WinXP使用自己的OpenGL软件实现,并回归到OpenGL 1.1.那么有没有3D硬件加速不能绘制的纹理?还是有一个常见的陷阱?

opengl winapi dib

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

标签 统计

opengl ×10

c++ ×5

glut ×3

c ×1

codeblocks ×1

dib ×1

glsl ×1

image ×1

scale ×1

shader ×1

textures ×1

transformation ×1

vector ×1

vertex ×1

viewport ×1

winapi ×1