最終更新:
mikk_ni3_92 2009年10月05日(月) 17:13:06
現在地:メニュー >> NVIDIA_SDK >> NVIDIA_SDK_05 >> NVIDIA_SDK_05::まとめ1
関連:NVIDIA_SDK_05::まとめ2、NVIDIA_SDK_05::まとめ3
「nvModel.h」、「nvModel.lib」、「nvModel.dll」を用意して、「objファイル」を読み込み表示せよ。
その他条件:
関連:NVIDIA_SDK_05::まとめ2、NVIDIA_SDK_05::まとめ3
「nvModel.h」、「nvModel.lib」、「nvModel.dll」を用意して、「objファイル」を読み込み表示せよ。
その他条件:
- ワイヤーフレームで描画(頂点だけの描画でよい)
- 「nvGlutManipulators.h」を使ってマウス処理ができるようにする
#include <iostream>
#include "nvModel.h"//内部でglewをインクルードしている
#include <GL/glut.h>
#include <nvGlutManipulators.h>
#pragma comment(lib,"nvModel.lib")
//------- 各種外部変数 --------//
nv::GlutExamine manipulator; //マウス操作用マニピュレータ
nv::Model model;
//------------- プロトタイプ宣言 ------------------//
void display();
void reshape(int w, int h);
void myMouseFunc(int button,int state,int x,int y);
void myMouseMotion(int x,int y);
//------------- OpenGLの初期設定 -------------------------//
void GLUT_CALL_FUNCs()
{
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMouseFunc(myMouseFunc);
glutMotionFunc(myMouseMotion);
}
void OtherMyInit()
{
glClearColor(1.0, 1.0, 1.0, 1.0);
glEnable(GL_DEPTH_TEST);
}
void GLUT_INITs(int *argcp, char **argv)
{
glutInit(argcp,argv);
glutInitDisplayMode(GLUT_RGBA| GLUT_DOUBLE | GLUT_DEPTH);
glutInitWindowSize(640,480);
glutCreateWindow("NVIDIA SDK nvModel Sample");
GLUT_CALL_FUNCs();
OtherMyInit();
}
//----------- メイン関数 -----------------//
int main(int argc, char **argv)
{
GLUT_INITs(&argc,argv);
manipulator.setTrackballScale(2.0);//トラックボール(回転処理の速度)
manipulator.setDollyActivate( GLUT_LEFT_BUTTON, GLUT_ACTIVE_CTRL);//左ドラッグ+ctl → dolly移動処理
manipulator.setPanActivate( GLUT_LEFT_BUTTON, GLUT_ACTIVE_SHIFT);//左ドラッグ+Shfit → pan移動処理
//objファイル読み込み
if(!model.loadModelFromFile("cow.obj"))
{
std::cerr << "Can't Load OBJ file\n";
return -1;
}
model.computeNormals();
model.compileModel();
model.rescale(1);
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
glutMainLoop();
return 0;
}
//------------- ここから各種コールバック -----------------//
void display()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
gluLookAt(0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
manipulator.applyTransform();//移動を適用する(回転、平行、拡大縮小など)
glColor3f(0,0,0);
glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(model.getPositionSize(), GL_FLOAT, 0, model.getPositions());
glDrawElements(GL_TRIANGLES,model.getIndexCount(), GL_UNSIGNED_INT, model.getPositionIndices());
glDisableClientState(GL_VERTEX_ARRAY);
glColor3f(1,1,1);
glutSwapBuffers();
}
void reshape(int w, int h)
{
glViewport(0, 0, w, h);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(30.0, (double)w / (double)h, 0.1, 1000.0);
glMatrixMode(GL_MODELVIEW);
manipulator.reshape(w, h);
}
void myMouseFunc(int button,int state,int x,int y)
{
manipulator.mouse(button, state, x, y);
}
void myMouseMotion(int x,int y)
{
manipulator.motion(x, y);
glutPostRedisplay();
}
最新コメント