我一直在使用OpenGL了大约一年了,学到了很多东西.不幸的是我的方式得知这是旧的预3.x的方式,这意味着即时模式,默认着色器,矩阵堆栈等我或多或少都有哪些通过观察OpenGL的规格已经从再改为现在的想法,但是我并不完全了解一些新的做事方式.
从我的理解,他们摆脱了矩阵堆叠的,这意味着你必须跟踪自己的变换矩阵,这似乎并没有太复杂的.他们还摆脱了直接模式,这意味着你现在需要使用维也纳组织或VAOs(永远不知道哪一个,或许两个..)发送像素/正常/纹理等.着色器程序的信息.我真的不明白这些对象的工作方式,我认为你需要把所有的信息放进去,并提供某种形式的OFSET显示像素,正常和纹理坐标之间的分隔符.有人可以简单解释一下这实际上是如何工作的(或者给我一个解释它的链接)?我尝试维基百科和谷歌搜索,但发现自己还是没有完全理解它们.
我想更多地了解的另一点是着色器,因为我从未使用它们.我不会问如何编写它们或任何东西,只需要在那里进行什么以及opengl仍然为你做什么.更具体地说,您需要在着色器中执行哪些操作才能获得基本渲染程序?我知道你需要做所有的计算并使用你的矩阵来计算真实的顶点位置.但是opengl是否仍然会处理背面剔除,线条剪裁,多边形填充和其他较低级别的问题,或者您是否必须将它们编码到着色器中(或者它们甚至不属于着色器)?
我正在尝试找到过去的拉取请求,以查看在特定问题上做出了哪些评论/操作.
我知道文件和更改,所以我可以通过查看责备视图来进行引入它的提交.但是我找不到一种方法来查看第一次将该提交推送到分支的pull请求.
有没有办法做到这一点?或者我是否必须沿着记忆通道行进并手动浏览过去的拉动请求?
我一直在努力解决一个问题,到目前为止,我还没有达到我所说的最佳解决方案.我有一个维度(功能)需要在其他2个维度(操作和会话)中引用,而这些维度又是从同一个事实表(UserAction)引用的.这会产生歧义,我无法完成架构:
(注意:模型的剪辑,而不是整个事物)(包括桥表,以显示模型中具有多对多关系的一些增加的复杂性)
我认为问题可能在于Dim_Features在技术上在两个维度之间具有不同的含义,但我仍然试图使用它作为相同的?它意味着:
我需要完成的是能够通过Sessions过滤/切片Fact_UserActions,其中某些功能可用/不可用,然后分析如下内容:
关于我可能做错了什么,或者我如何改进模型的任何想法?
编辑:如果它有所帮助,我们想要摆脱的事情就是这样一个表:
我们可以看到一个特征对整个人口以及拥有它的人口的影响.
我有一个TabControl绑定到Viewmodels的集合,它被转换成适合绘制到选项卡中的适当的:
<Window.Resources>
<ResourceDictionary>
<DataTemplate DataType="{x:Type charting:LineFormatViewModel}">
<charting:LineFormatView />
</DataTemplate>
<DataTemplate DataType="{x:Type charting:IndexSettingsViewModel}">
<charting:IndexSettingsView />
</DataTemplate>
....
</ResourceDictionary>
</Window.Resources>
<TabControl ItemSource="Binding ViewModels" />
Run Code Online (Sandbox Code Playgroud)
我一直试图找到一种方法来始终在任何一个孩子的最大宽度和高度绘制TabControl.让WPF Tabcontrol高度假设最大项目的高度?提到了几种在答案中实现这一点的方法(来自我所理解的):
有没有人有解决类似问题的经验?每当我在这方面取得一些进展时,我似乎都会碰到更多的墙壁.
我刚刚std::vector在添加新元素时偶然发现了一个问题.
当您尝试向其添加更多元素时,它似乎需要分配更多空间,它通过复制来实现 最后一个元素 它目前拥有的所有元素.这似乎假设向量中的任何元素都是完全有效的,因此副本将始终成功.
在我们的例子中,这不一定是真的.目前我们可能在向量中有一些遗留元素,因为我们选择不删除它们,它们是有效对象,但它们的数据不保证有效行为.对象有防护,但我从未考虑过向复制构造函数添加防护,因为我认为我们永远不会复制无效对象(向量强制):
CopiedClass::CopiedClass(const CopiedClass& other)
: member(other.member)
{
member->DoSomething();
}
Run Code Online (Sandbox Code Playgroud)
碰巧当我们完成原始对象并将其留在向量中时,"成员"被置为空,所以当std :: vector尝试复制它时,它会崩溃.
是否可以防止std::vector复制该元素?或者我们是否必须防止可能的无效对象被复制?理想情况下,我们想继续假设只创建了有效的对象,但这似乎意味着我们立即将它们从向量中清除,而不是等待并在稍后阶段进行.
我正在尝试将.editorconfig添加到我们的github repo中,以使github代码查看器将标签显示为4个空格.这听起来很简单,据说GitHUb提供原生支持,但是我无法让它工作.
我已将以下.editorconfig添加到我们的repo的根目录:
# top-most EditorConfig file
root = true
# 4 space indentation
[*.{cpp,h,cs,xaml,editorconfig}]
indent_style = space
indent_size = 4
# # #
# # #
Run Code Online (Sandbox Code Playgroud)
带有哈希的最后两行分别用制表符和空格完成.当我在github代码查看器中打开此文件时,第一行显示标签为8个空格.如果我在URL中添加?ts = 4,则标签显示为4个空格.
我只是使用这个错误/期望它做一些事情吗?我们的问题是repo中的旧代码添加了选项卡,我们希望在新代码中开始使用制表符作为空格(4个空格),因此我们希望现有选项卡显示与新选项卡对齐.
任何指导将不胜感激.
我试图将Singleton设计模式合并到我的代码中,但我开始遇到一个奇怪的错误:
main.obj : error LNK2005: "private: static class gameState * gameState::state" (?state@gameState@@0PAV1@A) already defined in gameState.obj
Run Code Online (Sandbox Code Playgroud)
如果您不熟悉单例模式,它基本上只用于在整个程序中强制执行某个对象的1个实例.以下是相关代码:gameState.h:
class gameState
{
public:
static gameState* Instance() {return state;}
.
.
.
private:
gameState();
static gameState* state;
};
gameState* gameState::state = new gameState();
Run Code Online (Sandbox Code Playgroud)
现在我只是在main.cpp文件中使用该对象的实例:
gameState *currState = gameState::Instance();
.
.
.
for_each(currState->getHumanPieces().begin(),currState->getHumanPieces().end(), drawPieces);
Run Code Online (Sandbox Code Playgroud)
看起来我试图重新定义gameState :: state,但无法弄清楚为什么......帮助任何人?
解决了这个问题,但仍然存在一个错误,我之前并没有真正发布,因为我认为它只是另一个错误的一部分:
error LNK2019: unresolved external symbol "private: __thiscall gameState::gameState(void)" (??0gameState@@AAE@XZ) referenced in function "void __cdecl `dynamic initializer for 'private: static class gameState * gameState::state''(void)" (??__E?state@gameState@@0PAV1@A@@YAXXZ)
Run Code Online (Sandbox Code Playgroud)
关于如何解决这个问题的任何好的提示?
谢谢你们两位,修好了:D
我正在尝试创建一个可以在3d空间中移动的摄像头,并且在设置它时遇到了一些问题.我这样做是Java,显然使用gluPerspective和gluLookAt会产生冲突(屏幕开始像疯了一样闪烁).
gluPerspective设置如下:
gl.glMatrixMode(GLMatrixFunc.GL_PROJECTION);
gl.glLoadIdentity();
glu.gluPerspective(50.0f, h, 1.0, 1000.0);
gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);
Run Code Online (Sandbox Code Playgroud)
然后我创建了一个相机矩阵,利用眼睛坐标,向前和向上矢量(http://people.freedesktop.org/~idr/glu3/form_4.png)(假设相机的代码是正确的.
最后,在我绘制任何东西之前:
gl.glMatrixMode(GLMatrixFunc.GL_MODELVIEW);
gl.glLoadIdentity();
gl.glMultMatrixf(camera.matrix);
Run Code Online (Sandbox Code Playgroud)
然后我调用我的绘图例程(通过调用glRotatef和glTranslatef自己进行一些转换/旋转).
如果没有调用glMultMatrixf,相机会显示我需要在屏幕中央看到的项目.然而,使用glMulMatrixf,我得到的只是一个黑屏.我尝试使用glLoadMatrixf而它也没用.难道我做错了什么?我把东西放在一边吗?如果没有,这就是它应该如何完成让我知道,我会发布一些可能会产生冲突的相机代码.
编辑:这是相机矩阵创建代码:
private void createMatrix()
{
float[] f = new float[3]; //forward (centre-eye)
float[] s = new float[3]; //side (f x up)
float[] u = new float[3]; //'new up' (s x f)
for(int i=0;i<3;i++){
f[i] = centre[i]-eye[i];
}
f = Maths.normalize(f);
s = Maths.crossProduct(f,upVec);
u = Maths.crossProduct(s,f);
float[][] mtx = new float[4][4];
float[][] mtx2 = new float[4][4];
//initializing matrices to all 0s
for …Run Code Online (Sandbox Code Playgroud) 嘿!我正在做这个项目,现在我正在尝试:
无论如何,我只是在网上搜索,我来到了stl for_each函数.看起来很整洁,但我遇到了问题.我试图以这种方式使用它:
for_each(V.begin(), V.end(), iterateThroughSmallVectors);
Run Code Online (Sandbox Code Playgroud)
iterateThroug ....只是在传递给它的向量上做同样的事情.
现在我得到一个奇怪的"矢量迭代器不兼容"运行时错误.我已经查看了它,但在此找不到任何有用的输入..
我不知道它是否有帮助,但V是存储在A类中的私有向量<>,它有一个访问器,我试图通过执行以下操作在B类中迭代它:
A->getV().begin(), A->getV().end(), etc..
Run Code Online (Sandbox Code Playgroud)
任何人都知道发生了什么事?
编辑:好的,所以我认为发布代码更好,问题可能会出现......
gameState.h中的getTiles:
vector<vector<tile*>> getTiles();
Run Code Online (Sandbox Code Playgroud)
main.cpp中的for_each循环:
for_each(currState->getTiles().begin(),currState->getTiles().end(), drawTiles);
.
.
void drawTiles(vector<tile*> row)
{
for_each(row.begin(), row.end(), dTile);
}
void dTile(tile *t)
{
t->draw();
}
Run Code Online (Sandbox Code Playgroud)
创建向量:
int tp = -1;
int bCounter = 0;
int wCounter = 0;
for (int i = 0; i < 8; i++)
{
vector<tile*> row(8);
for (int j = 0; j < 8; j++)
{
tile *t = new tile(tp, …Run Code Online (Sandbox Code Playgroud) 还有一个问题,转到我!...无论如何,我有两个私有构造函数和静态函数的类来返回该类的实例.一切都很好,我有一个main.cpp文件,我设法得到我的gameState对象指针,通过这样做:
gameState *state = gameState::Instance();
Run Code Online (Sandbox Code Playgroud)
但现在我似乎遇到了问题.为方便起见,我希望gameState实例和actionHandler实例都保留指向对方的副本.所以我试图在彼此的头文件中包含:
gameState *state;
Run Code Online (Sandbox Code Playgroud)
和
actionHandler *handler;
Run Code Online (Sandbox Code Playgroud)
但是,这似乎不起作用......我得到"错误C2143:语法错误:缺少';' 在这两行之前的'*'"错误之前......如果该类有私有构造函数,你能否在头文件中定义某个classe的变量?或者是其他问题?或许是因为指向teh实例的指针存储为静态成员?
编辑:谢谢你们!令人惊讶的是我最近几天获得的c ++知识量很多......真棒!