小编Val*_*tin的帖子

在C#中使用OpenGl?

C#有免费的OpenGL支持库吗?如果是这样,我使用哪一个,在哪里可以找到样本项目?

C#是否为OpenGL提供类?

c# opengl

117
推荐指数
7
解决办法
15万
查看次数

glBindVertexArrays与glBindBuffer的作用是什么?它们的关系是什么?

我是OpenGL和图形编程的新手.到目前为止,我一直在读一本非常详尽且写得很好的教科书.但是,我在代码中找到了一点,我不太了解,我想在我之前理解这些线条.继续.

GLuint abuffer;

glGenVertexArrays(1, &abuffer);
glBindVertexArray(abuffer);
Run Code Online (Sandbox Code Playgroud)
GLuint buffer;
glGenBuffers(1, &buffer);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(points), points, GL_STATIC_DRAW);
Run Code Online (Sandbox Code Playgroud)

该书解释说,前三行是创建一个顶点数组对象,用于将关联数据与顶点数组捆绑在一起.第二行找到一个未使用的名称(我猜测存储的无符号整数标识符abuffer),第三行创建对象/使其处于活动状态.

这本书解释了第4到第7行创建一个缓冲对象来存储我们的数据,第5行给我们一个未使用的标识符(类似于第2行的顶点数组对象?),第6行创建缓冲区,第7行line在CPU上分配足够的内存并创建指向我们的数据(点)的指针GL_STATIC_DRAW.

对象处于活动状态意味着什么?你abuffer什么时候会用?顶点数组捆绑关联数据是什么意思,以及与此顶点数组对象关联的数据何时?

我对abuffer和之间的关系感到困惑buffer.我对顶点数组与缓冲区对象的关系以及该关系形成的关系感到困惑.我不确定它们是否实际上是相关的,但是它们在教科书中一个接一个地出现.

任何帮助,将不胜感激.谢谢.

c++ opengl

71
推荐指数
4
解决办法
2万
查看次数

GL_QUADS有什么不好的?

我听说GL_QUADS将在OpenGL版本> 3.0中删除,为什么会这样?我的旧程序将来不会有用吗?我已经进行了基准测试,GL_TRIANGLES或者GL_QUADS在渲染速度方面没有差异(甚至可能GL_QUADS更快).那么重点是什么?

opengl deprecated

63
推荐指数
3
解决办法
5万
查看次数

移动原始实例后,不会反映使用字段可变引用的更改

我试图通过从它的实例借用一个可变引用来操纵x结构的字段。Foofoo

如果我尝试在原始实例移动x使用y实例的移动绑定打印字段,它会继续打印未更改的值。foo

下面的简化示例:

struct Foo {
    x: i32,
}

fn main() {
    let mut foo = Foo { x: 42 };
    let x = &mut foo.x;
    *x = 13;
    let y = foo;
    println!("{}", y.x); // -> 42; expected result: 13
}
Run Code Online (Sandbox Code Playgroud)

相反,如果我打印移动的绑定y本身,它会打印更改后的值。

println!("{:?}", y); // -> Foo { x: 13 }
Run Code Online (Sandbox Code Playgroud)

或者,如果我在移动之前xfoo.x 之前打印其他内容,它会按预期打印内容。

println!("{}", x); // -> 13
let y = foo; …
Run Code Online (Sandbox Code Playgroud)

reference move rust

61
推荐指数
1
解决办法
5729
查看次数

通过glUniform1i设置纹理

我有一个关于如何设置纹理的问题glUniform1i.我见过如下代码.

glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D, texture0);
glUniform1i(_textureUniform, 0);
glActiveTexture(GL_TEXTURE1); 
glBindTexture(GL_TEXTURE_2D, texture1);
glUniform1i(_textureUniform, 1);
Run Code Online (Sandbox Code Playgroud)

这是否意味着,如果我使用的数量iglUniform1i的话,我必须使用glActiveTexture(GL_TEXTURE **i** )

opengl

51
推荐指数
1
解决办法
2万
查看次数

gl_triangle_strip vs gl_triangle_fan

我需要一个多边形的例子,只能通过triangle_strip和另一个只能通过triangle_fan完成的多边形来完成.

opengl gl-triangle-strip

27
推荐指数
2
解决办法
3万
查看次数

C++ RAII类中的OpenGL对象不再有效

我在C++类中有一个OpenGL对象.由于我正在使用RAII,我想让析构函数删除它.所以我的班级看起来像:

class BufferObject
{
private:
  GLuint buff_;

public:
  BufferObject()
  {
    glGenBuffers(1, &buff_);
  }

  ~BufferObject()
  {
    glDeleteBuffers(1, &buff_);
  }

//Other members.
};
Run Code Online (Sandbox Code Playgroud)

这看起来很有效.但是当我执行以下任何操作时,我在使用它时会开始出现各种OpenGL错误:

vector<BufferObject> bufVec;
{
  BufferObject some_buffer;
  //Initialize some_buffer;
  bufVec.push_back(some_buffer);
}
bufVec.back(); //buffer doesn't work.

BufferObject InitBuffer()
{
  BufferObject buff;
  //Do stuff with `buff`
  return buff;
}

auto buff = InitBuffer(); //Returned buffer doesn't work.
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?

注意:这是尝试建立这些问题的规范答案.

c++ opengl c++11

20
推荐指数
1
解决办法
721
查看次数

3D光线拾取在鼠标未锁定时使用鼠标坐标

所以基本上我已经使用OpenGL创建了一个可以执行3D Ray Picking的程序.如果Camera View Direction Ray触摸/交叉任何东西(不是空气),那么将在交叉点/点处渲染一个小的紫色框.

如果光线与任何"红色框"相交,那么与光线相交的光线将变为绿色.地面和墙壁根本不会改变颜色或纹理.

例子:

我目前进行3D射线拾取的方法是获取相机的视线方向光线,然后只计算交叉点.我计算交叉点的函数不作为布尔值返回,它作为3D矢量返回(交集本身的坐标)

问题

所以我想要实现的是计算拾取雷,但是当它没有锁定到屏幕时根据鼠标.

示例 - 所以在这里你可以看到紫色的盒子在十字准线上,但是如果我要解锁鼠标并移动它(在屏幕顶部,正常情况下)并将其移动到绿色X标记的中心我'我画了,然后我想计算从摄像机中心到屏幕顶部鼠标坐标的光线.

目前的测试和想法

这应该只是一个数学问题.这里只是我目前用来计算雷的一些简短列表(并试图计算第二条射线)

  • Cameara X,Y,Z
  • 相机间距偏转辊(现在不使用辊)
  • 相机近远(距离)
  • 相机Fov
  • 相机方面
  • 鼠标X,Y(在屏幕顶部)
  • Sceen Width,Height

鼠标X和Y原点(0x0)位于窗口/框架的左下角.

计算主要的拾取射线本身

Vector3D position = new Vector3D(
        camera.x,
        camera.y,
        camera.z);

Vector3D direction = new Vector3D(
        Math.cos(Math.toRadians(camera.pitch)) * -Math.sin(Math.toRadians(-camera.yaw)) * camera.far,
        Math.cos(Math.toRadians(camera.pitch)) * cameara.far,
        Math.cos(Math.toRadians(camera.pitch)) * -Math.sin(Math.toRadians(-camera.yaw)) * camera.far);

direction.normalize();

Ray3D ray = new Ray(position, direction);
Run Code Online (Sandbox Code Playgroud)

这就是我计算主要拾取光线本身的方式(锁定鼠标的拾取光线).我做出了自己的类,但他们应该感(Vector3D,Ray3D,等)和normalize()方法不正是它说,标准化的载体.

理念

因此,当我尝试使用鼠标坐标进行计算时,我在调用之前插入了以下代码direction.normalize();,因此在创建之后 …

opengl 3d vector projection ray-picking

12
推荐指数
1
解决办法
1万
查看次数

GLSL对象发光

是否可以创建一个GLSL着色器来让任何对象被发光效果包围?假设我有一个3d立方体,如果它被选中,立方体应该被蓝色发光效果包围.任何提示?

opengl shader glsl

11
推荐指数
1
解决办法
1万
查看次数

查找部分有序集的最大元素的高效算法

我有一个偏序集,说A = [x1, x2, ...],这意味着每一个xixj集合中的,(恰好)的四种可能性之一为真:xi < xj,xi == xj,xi > xj,或xixj所无法比拟的.

我想找到的最大元素(即,这些元素xi是针对那些还没有元素xjxi < xj).什么是有效的算法(最小化比较次数)?我尝试构建DAG并进行拓扑排序,但只是构建图形需要进行O(n ^ 2)次比较,这太多了.

我在Python中这样做,但如果你不知道它我可以读其他语言,或伪代码.

algorithm poset

11
推荐指数
1
解决办法
1583
查看次数