我想得到一个着色器程序对象使用的所有制服和属性的列表. glGetAttribLocation()&glGetUniformLocation()可以用来将字符串映射到一个位置,但我真正想要的是字符串列表而不必解析glsl代码.
注意:在OpenGL 2.0中glGetObjectParameteriv()被替换为glGetProgramiv().而enum是GL_ACTIVE_UNIFORMS&GL_ACTIVE_ATTRIBUTES.
我正在为iOS编写3D应用程序.我是OpenGL ES 2.0的新手,所以我还在自己编写基本的着色器.我真的需要根据纹理对我的一些模型实现"辉光"效果.
这是一个示例:
.
我正在寻找OpenGL ES 2.0的代码示例.我在互联网上找到的大多数代码都是桌面OpenGL或D3D.
有任何想法吗?
I was searching a bug in an application, which I've finally fixed but didn't understand completely. The behavior can be reproduced with the following simple program:
#include <iostream>
#include <memory>
#include <functional>
struct Foo
{
virtual int operator()(void) { return 1; }
};
struct Bar : public Foo
{
virtual int operator()(void) override { return 2; }
};
int main()
{
std::shared_ptr<Foo> p = std::make_shared<Bar>();
std::cout << (*p)() << std::endl;
std::function<int(void)> f;
f = *p;
std::cout << f() << std::endl; …Run Code Online (Sandbox Code Playgroud) glLineStipple已在最新的OpenGL API中弃用.什么被取代?如果没有更换,我怎么能得到类似的效果?(我当然不想使用兼容性配置文件...)
我需要在OpenGL ES 2.0中的剪切平面下剪切几百个对象,并且会欣赏那些对这个OpenGL子集更有经验的人的想法.
在OpenGL ES 1.x中有glClipPlane.在桌面上,您在着色器中有glClipPlane或gl_ClipDistance.这两者都不适用于OpenGL ES 2.0.似乎这种功能完全消失了2.0.
似乎唯一的方法是:A)在片段着色器中运行平面方程,或者B)编写一个非常复杂的顶点着色器,如果它们位于平面后面,则将它们定位在平面上.
(a)与glClipPlane相比会很慢,因为在顶点着色器之后和片段着色器之前进行"常规"剪辑,每个片段仍然必须被部分处理和丢弃.
(B)很难在着色器之间进行兼容,因为我们不能丢弃顶点,我们必须将它们与平面对齐并调整那些"切割"的属性.如果不在纹理中发送所有顶点并对其进行采样,则无法在着色器中的顶点之间进行插值,这将非常昂贵.通常,无论如何都可能无法正确地插入数据.
我还想过将近平面与剪切平面对齐,这将是一种有效的解决方案.
在渲染整个场景并检查深度失败后绘制平面也不起作用(除非您看起来接近垂直于平面).
对单个对象起作用的是将平面绘制到深度缓冲区,然后使用glDepthFunc(GL_GREATER)渲染对象,但正如预期的那样,当其中一个对象位于另一个对象后面时,它不起作用.我试图建立在这个概念的基础上,但最终得到了与阴影卷非常相似的东西,同样昂贵.
那我错过了什么?你会如何在OpenGL ES 2.0中进行平面剪裁?
奇怪的是,在调试模式下,如果脚本在通常会发生段错误(没有断点)的地方停止(通过断点),然后恢复,则不会发生段错误。很奇怪吧?
本项目使用pycharm和pygame。操作系统是 windows 10。该项目包含跨 8 个模块的约 1500 行代码,到目前为止调试效果很好。
正常运行脚本时(不在调试中)不会发生分段错误。这是发生段故障时终端的输出:
Fatal Python error: pygame_parachute: (pygame parachute) Segmentation Fault
Python runtime state: initialized
#some other threads here
Thread 0x0000490c (most recent call first):
... a long stack trace
Thread 0x00002c98 (most recent call first):
... a long stack trace
Thread 0x000048ec (most recent call first):
... a long stack trace
Current thread 0x000020d0 (most recent call first):
File "C:\Users\Solaire\PycharmProjects\Game2\ai.py", line 60 in do_ai
**File "C:/Users/Solaire/PycharmProjects/Game2/main.py", line 45 in <module>**
File "C:\Program Files\JetBrains\PyCharm …Run Code Online (Sandbox Code Playgroud) 非零退出代码(1): _ pydevd_bundle/pydevd_cython.c:13:20:致命错误:Python.h:没有此类文件或目录编译终止.错误:命令'x86_64-linux-gnu-gcc'以退出状态1失败
请帮我解决尝试在PyCharm中安装Cython的错误.
正如标题所说,我不能vector_array[foo]在webgl顶点着色器中做(假设foo是范围内和整数),对吗?
纹理是最好的选择,还是有解决方法或更好的方法来模仿查找表?
当我在OpenGL 2.0中更新iOS上的顶点数组时,原始顶点数据停留在屏幕上 - 即第一次刷新是持久的(我向下发送到GPU的初始点集每帧渲染),但是第二次,第3,第4,...第n次冲洗似乎都覆盖了相同的记忆.
所以我在做:
vector<VertexType> rawDynamicData ;
glGenVertexArraysOES( 1, &va ) ; CHECK_GL ;
glBindVertexArrayOES( va ) ; CHECK_GL ;
glGenBuffers( 1, &vb ) ; CHECK_GL ;
glBindBuffer( GL_ARRAY_BUFFER, vb ) ; CHECK_GL ;
glBufferData( glBufferData(
GL_ARRAY_BUFFER, //Specifies the target buffer object.
rawDynamicData.size() * sizeof( VertexType ),
&rawDynamicData[0],
GL_DYNAMIC_DRAW // I plan to update the data every frame
) ; CHECK_GL ;
Run Code Online (Sandbox Code Playgroud)
在随后的帧中,我只是再次打电话:
// update the data
glBufferData( glBufferData(
GL_ARRAY_BUFFER, //Specifies the target buffer object.
rawDynamicData.size() * sizeof( VertexType …Run Code Online (Sandbox Code Playgroud) 我有一个非常简单的MFC对话框,只有一个CComboBoxEx控件.
.RC
IDD_MFCAPPLICATION1_DIALOG DIALOGEX 0, 0, 160, 200
STYLE DS_SETFONT | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
EXSTYLE WS_EX_APPWINDOW
CAPTION "MFCApplication1"
FONT 8, "MS Shell Dlg", 0, 0, 0x1
BEGIN
CONTROL "", IDC_COMBO1, "ComboBoxEx32", CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP, 10, 20, 140, 250
END
Run Code Online (Sandbox Code Playgroud)
c ++源代码
class CMFCApplication1Dlg : public CDialogEx
{
public:
CMFCApplication1Dlg(CWnd* pParent = NULL);
virtual void DoDataExchange( CDataExchange* pDX );
CComboBoxEx m_ctrlComboEx1;
virtual BOOL OnInitDialog();
DECLARE_MESSAGE_MAP()
};
Run Code Online (Sandbox Code Playgroud)
CMFCApplication1Dlg::CMFCApplication1Dlg(CWnd* …Run Code Online (Sandbox Code Playgroud)