奇妙なことに遭遇しました。コードのこの部分を見てください:
Models::ziemia.drawSolid();
Models::ptaszek.drawSolid();
Models::dach5.drawSolid();
Models::sciany1.drawSolid();
Models::sciany2.drawSolid();
Models::sciany3.drawSolid();
Models::sciany4.drawSolid();
// Models::sciany5.drawSolid();
Models::zewnetrznydach1.drawSolid();
Models::zewnetrznydach2.drawSolid();
// Models::zewnetrznydach3.drawSolid();
// Models::zewnetrznydach4.drawSolid();
Models::wewnetrznydach1.drawSolid();
Models::wewnetrznydach2.drawSolid();
Models::wewnetrznydach3.drawSolid();
Models::wewnetrznydach4.drawSolid();
通常、これらのモデルはpythonスクリプトによって生成されます(したがって、すべてのファイルは同じで、一部のデータのみが変更されます(すべてのモデルの頂点など)。このようなセットでプログラムを正常に実行できます。ただし、コメント付きモデルのいずれかのコメントを外すと、セグメンテーションエラーとコアダンプが発生します。 Ubuntu 16.04で作業しています。ドライバーを変更しようとしましたが(同様の問題を解決した他の場所で)、何も変わりませんでした。ここに、比較する例があります(1つの動作モデルと動作していないモデル):
zewnetrznyDach2モデル(動作中):
#include "zewnetrznydach2.h"
namespace Models {
ZewnetrznyDach2 zewnetrznydach2;
ZewnetrznyDach2::ZewnetrznyDach2() {
vertices=ZewnetrznyDach2Internal::vertices;
normals=ZewnetrznyDach2Internal::normals;
vertexNormals=ZewnetrznyDach2Internal::vertexNormals;
texCoords=ZewnetrznyDach2Internal::texCoords;
colors=ZewnetrznyDach2Internal::colors;
vertexCount=ZewnetrznyDach2Internal::vertexCount;
}
ZewnetrznyDach2::~ZewnetrznyDach2() {
}
void ZewnetrznyDach2::drawSolid() {
glEnable(GL_NORMALIZE);
glEnableClientState(GL_VERTEX_ARRAY);
//glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(4,GL_FLOAT,0,vertices);
//glColorPointer(4,GL_FLOAT,0,colors);
glNormalPointer(GL_FLOAT,sizeof(float)*4,vertexNormals);
glTexCoordPointer(2,GL_FLOAT,0,texCoords);
glDrawArrays(GL_TRIANGLES,0,vertexCount);
glDisableClientState(GL_VERTEX_ARRAY);
//glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
}
namespace ZewnetrznyDach2Internal {
unsigned int vertexCount=36;
float vertices[]={
-16.193,-2.25,-9.829,1.0,
-15.999,-2.099,-9.829,1.0,
-5.413,-2.25,-9.829,1.0,
-15.999,-2.099,-9.829,1.0,
-16.193,-2.25,-9.829,1.0,
-16.193,6.2,-9.829,1.0,
-15.999,-2.099,-9.829,1.0,
-16.193,6.2,-9.829,1.0,
-15.999,5.820,-9.829,1.0,
-15.999,5.820,-9.829,1.0,
-16.193,6.2,-9.829,1.0,
-5.639,5.820,-9.829,1.0,
-5.413,6.2,-9.829,1.0,
-5.639,5.820,-9.829,1.0,
-16.193,6.2,-9.829,1.0,
-5.413,6.2,-9.829,1.0,
-5.639,-2.099,-9.829,1.0,
-5.639,5.820,-9.829,1.0,
-5.413,-2.25,-9.829,1.0,
-5.639,-2.099,-9.829,1.0,
-5.413,6.2,-9.829,1.0,
-5.639,-2.099,-9.829,1.0,
-5.413,-2.25,-9.829,1.0,
-15.999,-2.099,-9.829,1.0,
-5.639,-2.099,-9.829,1.0,
-15.999,-2.099,-9.829,1.0,
-15.999,-2.099,-9.769,1.0,
-15.999,-2.099,-9.829,1.0,
-15.999,5.820,-9.829,1.0,
-15.999,5.820,-9.769,1.0,
-15.999,5.820,-9.829,1.0,
-5.639,5.820,-9.829,1.0,
-5.639,5.820,-9.769,1.0,
-5.639,5.820,-9.829,1.0,
-5.639,-2.099,-9.829,1.0,
-5.639,-2.099,-9.769,1.0,
};
float colors[]={
};
float normals[]={
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,1,-0,0,
0,1,-0,0,
0,1,-0,0,
1,0,-0,0,
1,0,-0,0,
1,0,-0,0,
0,-1,-0,0,
0,-1,-0,0,
0,-1,-0,0,
-1,0,-0,0,
-1,0,-0,0,
-1,0,-0,0,
};
float vertexNormals[]={
};
float texCoords[]={
637.526,-88.582,
629.904,-82.667,
213.116,-88.582,
629.904,-82.667,
637.526,-88.582,
637.526,244.094,
629.904,-82.667,
637.526,244.094,
629.904,229.143,
629.904,229.143,
637.526,244.094,
222.03,229.143,
213.116,244.094,
222.03,229.143,
637.526,244.094,
213.116,244.094,
222.03,-82.667,
222.03,229.143,
213.116,-88.582,
222.03,-82.667,
213.116,244.094,
222.03,-82.667,
213.116,-88.582,
629.904,-82.667,
-222.03,386.989,
-629.904,386.989,
-629.904,384.626,
386.989,-82.667,
386.989,229.143,
384.626,229.143,
629.904,386.989,
222.03,386.989,
222.03,384.626,
-386.989,229.143,
-386.989,-82.667,
-384.626,-82.667,
};
}
}
zewnetrznydach3モデル(コメント付きで動作していない):
#include "zewnetrznydach3.h"
namespace Models {
ZewnetrznyDach3 zewnetrznydach3;
ZewnetrznyDach3::ZewnetrznyDach3() {
vertices=ZewnetrznyDach3Internal::vertices;
normals=ZewnetrznyDach3Internal::normals;
vertexNormals=ZewnetrznyDach3Internal::vertexNormals;
texCoords=ZewnetrznyDach3Internal::texCoords;
colors=ZewnetrznyDach3Internal::colors;
vertexCount=ZewnetrznyDach3Internal::vertexCount;
}
ZewnetrznyDach3::~ZewnetrznyDach3() {
}
void ZewnetrznyDach3::drawSolid() {
glEnable(GL_NORMALIZE);
glEnableClientState(GL_VERTEX_ARRAY);
//glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(4,GL_FLOAT,0,vertices);
//glColorPointer(4,GL_FLOAT,0,colors);
glNormalPointer(GL_FLOAT,sizeof(float)*4,vertexNormals);
glTexCoordPointer(2,GL_FLOAT,0,texCoords);
glDrawArrays(GL_TRIANGLES,0,vertexCount);
glDisableClientState(GL_VERTEX_ARRAY);
//glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
}
namespace ZewnetrznyDach3Internal {
unsigned int vertexCount=36;
float vertices[]={
0.011,-6.68,-10.305,1.0,
0.142,-6.589,-10.305,1.0,
4.741,-6.68,-10.305,1.0,
0.142,-6.589,-10.305,1.0,
0.011,-6.68,-10.305,1.0,
0.011,-2,-10.305,1.0,
0.142,-6.589,-10.305,1.0,
0.011,-2,-10.305,1.0,
0.142,-2.229,-10.305,1.0,
0.142,-2.229,-10.305,1.0,
0.011,-2,-10.305,1.0,
4.572,-2.229,-10.305,1.0,
4.741,-2,-10.305,1.0,
4.572,-2.229,-10.305,1.0,
0.011,-2,-10.305,1.0,
4.741,-2,-10.305,1.0,
4.572,-6.589,-10.305,1.0,
4.572,-2.229,-10.305,1.0,
4.741,-6.68,-10.305,1.0,
4.572,-6.589,-10.305,1.0,
4.741,-2,-10.305,1.0,
4.572,-6.589,-10.305,1.0,
4.741,-6.68,-10.305,1.0,
0.142,-6.589,-10.305,1.0,
4.572,-6.589,-10.305,1.0,
0.142,-6.589,-10.305,1.0,
0.142,-6.589,-10.265,1.0,
0.142,-6.589,-10.305,1.0,
0.142,-2.229,-10.305,1.0,
0.142,-2.229,-10.265,1.0,
0.142,-2.229,-10.305,1.0,
4.572,-2.229,-10.305,1.0,
4.572,-2.229,-10.265,1.0,
4.572,-2.229,-10.305,1.0,
4.572,-6.589,-10.305,1.0,
4.572,-6.589,-10.265,1.0,
};
float colors[]={
};
float normals[]={
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,0,-1,0,
0,1,-0,0,
0,1,-0,0,
0,1,-0,0,
1,0,-0,0,
1,0,-0,0,
1,0,-0,0,
0,-1,-0,0,
0,-1,-0,0,
0,-1,-0,0,
-1,0,-0,0,
-1,0,-0,0,
-1,0,-0,0,
};
float vertexNormals[]={
};
float texCoords[]={
-0.440,-262.992,
-5.607,-259.413,
-186.661,-262.992,
-5.607,-259.413,
-0.440,-262.992,
-0.440,-78.740,
-5.607,-259.413,
-0.440,-78.740,
-5.607,-87.759,
-5.607,-87.759,
-0.440,-78.740,
-180.017,-87.759,
-186.661,-78.740,
-180.017,-87.759,
-0.440,-78.740,
-186.661,-78.740,
-180.017,-259.413,
-180.017,-87.759,
-186.661,-262.992,
-180.017,-259.413,
-186.661,-78.740,
-180.017,-259.413,
-186.661,-262.992,
-5.607,-259.413,
180.017,405.722,
5.607,405.722,
5.607,404.147,
405.722,-259.413,
405.722,-87.759,
404.147,-87.759,
-5.607,405.722,
-180.017,405.722,
-180.017,404.147,
-405.722,-87.759,
-405.722,-259.413,
-404.147,-259.413,
};
}
}
これはどのように可能ですか?
回答 1 件
関連記事
- bashシェルでscpを使用中のセグメンテーションエラー(コアダンプ)
- セグメントツリーの構築中のC ++セグメンテーションエラー
- Cで4文字構造の2D配列をコピーしようとしたときにmemcpyエラーセグメンテーション違反が発生しました
- Cのセグメンテーションエラー(コアダンプ):PTHREADSの使用中
- コールバックからtextBoxにアクセス中のセグメンテーションエラー
- leveldbのC ++の例でイテレータを宣言している間のセグメンテーション違反
- usr/local/include内のyicesライブラリをブリッジしようとすると、Pybind11でセグメンテーションエラーが発生する
- ソリューションを送信した後のCodechef Webサイトでのセグメンテーションエラー
- C ++のリンクリストコードのセグメンテーションエラー
関連した質問
vertexNormals
空ですが、OpenGLからデータを読み取るように要求しています。最良の場合、OpenGLはゴミを取得します。最悪の場合、OpenGLがプロセスに割り当てられたメモリページの外側を読み取ろうとすると、セグメンテーション違反が発生します。
いくつかのオプション:
適切な数の法線を配列に入力します
OpenGLに異なるポピュレートされた配列にアクセスするように指示する
GL_NORMAL_ARRAY
を無効にします OpenGLが通常のポインターからまったく読み取らない状態