質問編集履歴

2 syuusei

seri

seri score 396

2016/08/04 20:40  投稿

OpenFrameWorksのVbo機能によるエラー
Vboを作成しDrawしたいのですが、エラーがでます。
以下のスクリプトでは、ボタンを押すとpad1on()が呼び出されます
その後CreateHexを開始し、childDraw()内でvboをDrawしています。このDraw時にエラーとなります、、
調べても原因がわかりません。。
```C++
#include "Sean-1.h"
void Sean_1::Setup() {
   _vbos.clear();
   ofBackground(0, 0, 0);
   ofEnableDepthTest();
   ofEnableBlendMode(OF_BLENDMODE_ADD);
   cam.setDistance(100);
   ofSetColor(214, 181, 255, 100);
   }
void Sean_1::Update() {
   ofSetWindowTitle(ofToString(ofGetFrameRate(), 2));
}
void Sean_1::pad1on() {
   createHex(22,3);
}
void Sean_1::createHex(float x,float y) {
   ofVbo vb;
   ofVec3f vec[6];
   float seta = TWO_PI / 6;
   ofTranslate(ofGetWidth() / 2, ofGetHeight() / 2);
   
   for (int i =0; i < 5; i++) {
           vec[i].set(10 * cos(ofGetElapsedTimef() + seta*i)+x,10 * sin(ofGetElapsedTimef() + seta*i)+y, 0);
   }
   
   vb.setVertexData(vec,6,GL_DYNAMIC_DRAW);
   
   _vbos.push_back(vb);
}
void Sean_1::childDraw() {
   cam.begin();
   glPointSize(2.0);
   for (int i = 0; i < _vbos.size(); i++) {
       _vbos[i].draw(GL_POLYGON, 0, 6);
   }
   cam.end();
}
```
ちなみに、エラーは以下です
```
0x55C71363 (nvoglv32.dll) で例外がスローされました (myFile_debug.exe 内): 0xC0000005: 場所 0x00000000 の読み取り中にアクセス違反が発生しました
この例外のハンドラーがある場合は、プログラムを安全に続行できます。
```  
 
名前から想像できるかとは思いますが一応ヘッダファイル内容も記述させていただきます  
```C++  
private:  
 
   void createHex(float x, float y);  
 
   ofEasyCam cam;  
 
   ofMesh mesh;  
 
   vector<ofVbo> _vbos;  
 
   vector<ofVec3f> vecs;  
 
```
  • openFrameworks

    127 questions

    openFrameworksは、C++で記述されたライブラリ群です。既存のライブラリの設定なしで使用できるため「糊」のようなツールキットと呼ばれています。簡単なコードだけで様々なグラフィックスやインタラクションをデザインすることが可能です。

1 修正

seri

seri score 396

2016/08/04 20:37  投稿

OpenFrameWorksのVbo機能によるエラー
Vboを作成しDrawしたいのですが、エラーがでます。
以下のスクリプトでは、ボタンを押すとpad1on()が呼び出されます
その後CreateHexを開始し、childDraw()内でvboをDrawしています。このDraw時にエラーとなります、、
調べても原因がわかりません。。
```C++
#include "Sean-1.h"
void Sean_1::Setup() {
   _vbos.clear();
   ofBackground(0, 0, 0);
   ofEnableDepthTest();
   ofEnableBlendMode(OF_BLENDMODE_ADD);
   cam.setDistance(100);
   ofSetColor(214, 181, 255, 100);
   }
void Sean_1::Update() {
   ofSetWindowTitle(ofToString(ofGetFrameRate(), 2));
}
void Sean_1::pad1on() {
   createHex(22,3);
}
void Sean_1::createHex(float x,float y) {
   ofVbo vb;
   ofVec3f vec[6];
   float seta = TWO_PI / 6;
   ofTranslate(ofGetWidth() / 2, ofGetHeight() / 2);
   
   for (int i =0; i < 5; i++) {
           vec[i].set(10 * cos(ofGetElapsedTimef() + seta*i)+x,10 * sin(ofGetElapsedTimef() + seta*i)+y, 0);
   }
   
   vb.setVertexData(vec,6,GL_DYNAMIC_DRAW);
   
   _vbos.push_back(vb);
}
void Sean_1::childDraw() {
   cam.begin();
   glPointSize(2.0);
   for (int i = 0; i < _vbos.size(); i++) {
       _vbos[i].draw(GL_POLYGON, 0, 6);
   }
   cam.end();
}
```  
 
ちなみに、エラーは以下です  
```  
0x55C71363 (nvoglv32.dll) で例外がスローされました (myFile_debug.exe 内): 0xC0000005: 場所 0x00000000 の読み取り中にアクセス違反が発生しました  
 
この例外のハンドラーがある場合は、プログラムを安全に続行できます。  
```
  • openFrameworks

    127 questions

    openFrameworksは、C++で記述されたライブラリ群です。既存のライブラリの設定なしで使用できるため「糊」のようなツールキットと呼ばれています。簡単なコードだけで様々なグラフィックスやインタラクションをデザインすることが可能です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る