Remove unused files
parent
5766a4dfbf
commit
058d9f3c5b
19
src/main.cpp
19
src/main.cpp
|
@ -1,19 +0,0 @@
|
||||||
#include <QApplication>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <assert.h>
|
|
||||||
#include "mainwindow.h"
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
|
||||||
{
|
|
||||||
QApplication a(argc, argv);
|
|
||||||
MainWindow w;
|
|
||||||
|
|
||||||
assert(0 != freopen((a.applicationDirPath() +
|
|
||||||
"/dust3d.log").toUtf8(), "w", stdout));
|
|
||||||
assert(0 != freopen((a.applicationDirPath() +
|
|
||||||
"/dust3d_error.log").toUtf8(), "w", stderr));
|
|
||||||
|
|
||||||
w.show();
|
|
||||||
|
|
||||||
return a.exec();
|
|
||||||
}
|
|
|
@ -1,23 +0,0 @@
|
||||||
#include <QtGui>
|
|
||||||
#include <QHBoxLayout>
|
|
||||||
#include <QDesktopWidget>
|
|
||||||
#include "mainwindow.h"
|
|
||||||
#include "render.h"
|
|
||||||
|
|
||||||
MainWindow::MainWindow(void) {
|
|
||||||
render = new Render;
|
|
||||||
int size = QDesktopWidget().availableGeometry(this).size().height() * 0.7;
|
|
||||||
resize(QSize(size, size));
|
|
||||||
QHBoxLayout *mainLayout = new QHBoxLayout;
|
|
||||||
mainLayout->addWidget(render);
|
|
||||||
setLayout(mainLayout);
|
|
||||||
setWindowTitle(tr("Dust3D Experiment"));
|
|
||||||
}
|
|
||||||
|
|
||||||
void MainWindow::keyPressEvent(QKeyEvent *e) {
|
|
||||||
if (e->key() == Qt::Key_Escape) {
|
|
||||||
close();
|
|
||||||
} else {
|
|
||||||
QWidget::keyPressEvent(e);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,21 +0,0 @@
|
||||||
#ifndef MAINWINDOW_H
|
|
||||||
#define MAINWINDOW_H
|
|
||||||
|
|
||||||
#include <QWidget>
|
|
||||||
|
|
||||||
class Render;
|
|
||||||
|
|
||||||
class MainWindow : public QWidget {
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
MainWindow(void);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void keyPressEvent(QKeyEvent *event);
|
|
||||||
|
|
||||||
private:
|
|
||||||
Render *render;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
469
src/render.cpp
469
src/render.cpp
|
@ -1,469 +0,0 @@
|
||||||
#include <QtGui>
|
|
||||||
#include <QtOpenGL>
|
|
||||||
#include <assert.h>
|
|
||||||
#include <math.h>
|
|
||||||
#include "render.h"
|
|
||||||
#include "draw.h"
|
|
||||||
#include "bmesh.h"
|
|
||||||
#include "matrix.h"
|
|
||||||
#include "vector3d.h"
|
|
||||||
#include "subdivide.h"
|
|
||||||
|
|
||||||
static const float bmeshBallColors[][4] = {
|
|
||||||
{0.00, 0.78, 1.00, 0.5},
|
|
||||||
{1.00, 0.00, 0.00, 0.5},
|
|
||||||
{1.00, 1.00, 1.00, 0.5}
|
|
||||||
};
|
|
||||||
|
|
||||||
static const float bmeshBoneColor[3] = {1, 1, 0};
|
|
||||||
|
|
||||||
static Render *_this = 0;
|
|
||||||
static int debugOutputTop = 0;
|
|
||||||
|
|
||||||
int drawDebugPrintf(const char *fmt, ...) {
|
|
||||||
int x = 0;
|
|
||||||
int y = debugOutputTop + 10;
|
|
||||||
va_list args;
|
|
||||||
char text[1024];
|
|
||||||
va_start(args, fmt);
|
|
||||||
vsnprintf(text, sizeof(text), fmt, args);
|
|
||||||
debugOutputTop += 9;
|
|
||||||
if (debugOutputTop > 400) {
|
|
||||||
debugOutputTop = 0;
|
|
||||||
}
|
|
||||||
glColor3f(0, 0, 0);
|
|
||||||
return drawText(x, y, text);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int drawBmeshBall(bmesh *bm, bmeshBall *ball) {
|
|
||||||
float color[4];
|
|
||||||
memcpy(color, bmeshBallColors[ball->type], sizeof(color));
|
|
||||||
if (BMESH_BALL_TYPE_ROOT == ball->type || BMESH_BALL_TYPE_KEY == ball->type) {
|
|
||||||
vec3 a = {_this->mouseWorldNearX, _this->mouseWorldNearY,
|
|
||||||
_this->mouseWorldNearZ};
|
|
||||||
vec3 b = {_this->mouseWorldFarX, _this->mouseWorldFarY,
|
|
||||||
_this->mouseWorldFarZ};
|
|
||||||
vec3 ab, ap, q;
|
|
||||||
float abDotAb;
|
|
||||||
float apDotAb;
|
|
||||||
float t;
|
|
||||||
vec3Sub(&b, &a, &ab);
|
|
||||||
vec3Sub(&ball->position, &a, &ap);
|
|
||||||
abDotAb = vec3DotProduct(&ab, &ab);
|
|
||||||
apDotAb = vec3DotProduct(&ap, &ab);
|
|
||||||
t = apDotAb / abDotAb;
|
|
||||||
if (t < 0.0f) {
|
|
||||||
t = 0.0f;
|
|
||||||
} else if (t > 1.0f) {
|
|
||||||
t = 1.0f;
|
|
||||||
}
|
|
||||||
vec3Scale(&ab, t, &q);
|
|
||||||
vec3Add(&a, &q, &q);
|
|
||||||
//drawDebugPrintf("q: %f,%f,%f t:%f", q.x, q.y, q.z, t);
|
|
||||||
if (vec3Distance(&ball->position, &q) <= ball->radius) {
|
|
||||||
color[3] = 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
glColor4fv(color);
|
|
||||||
drawSphere(&ball->position, ball->radius, 36, 24);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void drawBmeshBallRecursively(bmesh *bm, bmeshBall *ball) {
|
|
||||||
bmeshBallIterator iterator;
|
|
||||||
bmeshBall *child;
|
|
||||||
drawBmeshBall(bm, ball);
|
|
||||||
for (child = bmeshGetBallFirstChild(bm, ball, &iterator);
|
|
||||||
child;
|
|
||||||
child = bmeshGetBallNextChild(bm, ball, &iterator)) {
|
|
||||||
drawBmeshBallRecursively(bm, child);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void drawBmeshBallQuad(bmeshBall *ball) {
|
|
||||||
vec3 normal;
|
|
||||||
int j;
|
|
||||||
vec3 z, y;
|
|
||||||
quad q;
|
|
||||||
|
|
||||||
vec3Scale(&ball->localYaxis, ball->radius, &y);
|
|
||||||
vec3Scale(&ball->localZaxis, ball->radius, &z);
|
|
||||||
vec3Sub(&ball->position, &y, &q.pt[0]);
|
|
||||||
vec3Add(&q.pt[0], &z, &q.pt[0]);
|
|
||||||
vec3Sub(&ball->position, &y, &q.pt[1]);
|
|
||||||
vec3Sub(&q.pt[1], &z, &q.pt[1]);
|
|
||||||
vec3Add(&ball->position, &y, &q.pt[2]);
|
|
||||||
vec3Sub(&q.pt[2], &z, &q.pt[2]);
|
|
||||||
vec3Add(&ball->position, &y, &q.pt[3]);
|
|
||||||
vec3Add(&q.pt[3], &z, &q.pt[3]);
|
|
||||||
|
|
||||||
glColor4f(1.0f, 1.0f, 1.0f, 0.5);
|
|
||||||
glBegin(GL_QUADS);
|
|
||||||
vec3Normal(&q.pt[0], &q.pt[1], &q.pt[2], &normal);
|
|
||||||
for (j = 0; j < 4; ++j) {
|
|
||||||
glNormal3f(normal.x, normal.y, normal.z);
|
|
||||||
glVertex3f(q.pt[j].x, q.pt[j].y, q.pt[j].z);
|
|
||||||
}
|
|
||||||
glEnd();
|
|
||||||
|
|
||||||
glColor3f(0.0f, 0.0f, 0.0f);
|
|
||||||
glBegin(GL_LINE_STRIP);
|
|
||||||
for (j = 0; j < 4; ++j) {
|
|
||||||
glVertex3f(q.pt[j].x, q.pt[j].y, q.pt[j].z);
|
|
||||||
}
|
|
||||||
glVertex3f(q.pt[0].x, q.pt[0].y, q.pt[0].z);
|
|
||||||
glEnd();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void drawBmeshBallQuadRecursively(bmesh *bm, bmeshBall *ball) {
|
|
||||||
bmeshBallIterator iterator;
|
|
||||||
bmeshBall *child;
|
|
||||||
|
|
||||||
/*
|
|
||||||
matrix matTmp;
|
|
||||||
matrix matCalc;
|
|
||||||
float quad[4][3] = {
|
|
||||||
{-ball->radius, +ball->radius, 0},
|
|
||||||
{-ball->radius, -ball->radius, 0},
|
|
||||||
{+ball->radius, -ball->radius, 0},
|
|
||||||
{+ball->radius, +ball->radius, 0},
|
|
||||||
};
|
|
||||||
matrixLoadIdentity(&matCalc);
|
|
||||||
matrixAppend(&matCalc,
|
|
||||||
matrixTranslate(&matTmp, ball->position.x, ball->position.y,
|
|
||||||
ball->position.z));
|
|
||||||
matrixAppend(&matCalc,
|
|
||||||
matrixRotate(&matTmp,
|
|
||||||
ball->rotateAngle, ball->rotateAround.x, ball->rotateAround.y,
|
|
||||||
ball->rotateAround.z));
|
|
||||||
matrixTransformVector(&matCalc, quad[0]);
|
|
||||||
matrixTransformVector(&matCalc, quad[1]);
|
|
||||||
matrixTransformVector(&matCalc, quad[2]);
|
|
||||||
matrixTransformVector(&matCalc, quad[3]);
|
|
||||||
|
|
||||||
glVertex3fv(quad[0]);
|
|
||||||
glVertex3fv(quad[1]);
|
|
||||||
glVertex3fv(quad[2]);
|
|
||||||
glVertex3fv(quad[3]);
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
glPushMatrix();
|
|
||||||
glTranslatef(ball->position.x, ball->position.y,
|
|
||||||
ball->position.z);
|
|
||||||
glRotatef(ball->rotateAngle, ball->rotateAround.x, ball->rotateAround.y,
|
|
||||||
ball->rotateAround.z);
|
|
||||||
glBegin(GL_QUADS);
|
|
||||||
glVertex3f(-ball->radius, +ball->radius, 0);
|
|
||||||
glVertex3f(-ball->radius, -ball->radius, 0);
|
|
||||||
glVertex3f(+ball->radius, -ball->radius, 0);
|
|
||||||
glVertex3f(+ball->radius, +ball->radius, 0);
|
|
||||||
glEnd();
|
|
||||||
glPopMatrix();
|
|
||||||
*/
|
|
||||||
|
|
||||||
//drawBmeshBallQuad(ball);
|
|
||||||
|
|
||||||
for (child = bmeshGetBallFirstChild(bm, ball, &iterator);
|
|
||||||
child;
|
|
||||||
child = bmeshGetBallNextChild(bm, ball, &iterator)) {
|
|
||||||
drawBmeshBallQuadRecursively(bm, child);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static int drawBmeshBone(bmesh *bm, bmeshBone *bone) {
|
|
||||||
glColor3fv(bmeshBoneColor);
|
|
||||||
bmeshBall *firstBall = bmeshGetBall(bm, bone->firstBallIndex);
|
|
||||||
bmeshBall *secondBall = bmeshGetBall(bm, bone->secondBallIndex);
|
|
||||||
drawCylinder(&firstBall->position, &secondBall->position, 0.1, 36, 24);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int drawText(int x, int y, char *text) {
|
|
||||||
QFont font = QFont("Arial");
|
|
||||||
font.setPointSize(9);
|
|
||||||
font.setBold(false);
|
|
||||||
_this->renderText(x, y, QString(text), font);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Render::Render(QWidget *parent)
|
|
||||||
: QGLWidget(QGLFormat(QGL::SampleBuffers), parent) {
|
|
||||||
QTimer *timer = new QTimer(this);
|
|
||||||
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
|
|
||||||
timer->start(100);
|
|
||||||
|
|
||||||
mouseX = 0;
|
|
||||||
mouseY = 0;
|
|
||||||
cameraAngleX = 30;
|
|
||||||
cameraAngleY = -312;
|
|
||||||
cameraDistance = 14.4;
|
|
||||||
//cameraAngleX = 0;
|
|
||||||
//cameraAngleY = 0;
|
|
||||||
//cameraDistance = 0;
|
|
||||||
|
|
||||||
mouseScaleX = 1;
|
|
||||||
mouseScaleY = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
Render::~Render(void) {
|
|
||||||
}
|
|
||||||
|
|
||||||
void Render::initializeGL() {
|
|
||||||
glShadeModel(GL_SMOOTH);
|
|
||||||
glEnable(GL_CULL_FACE);
|
|
||||||
glEnable(GL_BLEND);
|
|
||||||
glDepthFunc(GL_LEQUAL);
|
|
||||||
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
|
||||||
glEnable(GL_DEPTH_TEST);
|
|
||||||
glEnable(GL_LIGHTING);
|
|
||||||
glEnable(GL_CULL_FACE);
|
|
||||||
|
|
||||||
qglClearColor(QWidget::palette().color(QWidget::backgroundRole()));
|
|
||||||
glClearStencil(0);
|
|
||||||
glClearDepth(1.0f);
|
|
||||||
|
|
||||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
|
||||||
|
|
||||||
GLfloat ambientLight[] = {0.0f, 0.0f, 0.0f, 1.0f};
|
|
||||||
GLfloat diffuseLight[] = {0.9f, 0.9f, 0.9f, 1.0f};
|
|
||||||
GLfloat specularLight[] = {1, 1, 1, 1};
|
|
||||||
glLightfv(GL_LIGHT0, GL_AMBIENT, ambientLight);
|
|
||||||
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseLight);
|
|
||||||
glLightfv(GL_LIGHT0, GL_SPECULAR, specularLight);
|
|
||||||
|
|
||||||
float lightDirection[4] = {0, 0, 1, 0};
|
|
||||||
glLightfv(GL_LIGHT0, GL_POSITION, lightDirection);
|
|
||||||
|
|
||||||
glEnable(GL_LIGHT0);
|
|
||||||
|
|
||||||
float shininess = 64.0f;
|
|
||||||
float specularColor[] = {1.0, 1.0f, 1.0f, 1.0f};
|
|
||||||
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, shininess);
|
|
||||||
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specularColor);
|
|
||||||
|
|
||||||
glColorMaterial(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE);
|
|
||||||
glEnable(GL_COLOR_MATERIAL);
|
|
||||||
|
|
||||||
drawInit();
|
|
||||||
}
|
|
||||||
|
|
||||||
void screenCoordsToWorld(float winX, float winY,
|
|
||||||
float *worldNearX, float *worldNearY, float *worldNearZ,
|
|
||||||
float *worldFarX, float *worldFarY, float *worldFarZ){
|
|
||||||
GLint viewport[4];
|
|
||||||
GLdouble modelview[16];
|
|
||||||
GLdouble projection[16];
|
|
||||||
GLfloat winZ = 0;
|
|
||||||
GLdouble x, y, z;
|
|
||||||
|
|
||||||
glGetDoublev(GL_MODELVIEW_MATRIX, modelview);
|
|
||||||
glGetDoublev(GL_PROJECTION_MATRIX, projection);
|
|
||||||
glGetIntegerv(GL_VIEWPORT, viewport);
|
|
||||||
|
|
||||||
winX = (float)winX;
|
|
||||||
winY = (float)viewport[3] - (float)winY;
|
|
||||||
|
|
||||||
winZ = 0;
|
|
||||||
gluUnProject((GLdouble)winX, (GLdouble)winY, (GLdouble)winZ,
|
|
||||||
(const GLdouble *)modelview, (const GLdouble *)projection, viewport,
|
|
||||||
&x, &y, &z);
|
|
||||||
*worldNearX = (float)x;
|
|
||||||
*worldNearY = (float)y;
|
|
||||||
*worldNearZ = (float)z;
|
|
||||||
{
|
|
||||||
vec3 origin = {(float)x, (float)y, (float)z};
|
|
||||||
drawDebugPoint(&origin, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
winZ = 1;
|
|
||||||
gluUnProject((GLdouble)winX, (GLdouble)winY, (GLdouble)winZ,
|
|
||||||
(const GLdouble *)modelview, (const GLdouble *)projection, viewport,
|
|
||||||
&x, &y, &z);
|
|
||||||
*worldFarX = (float)x;
|
|
||||||
*worldFarY = (float)y;
|
|
||||||
*worldFarZ = (float)z;
|
|
||||||
{
|
|
||||||
vec3 origin = {(float)x, (float)y, (float)z};
|
|
||||||
drawDebugPoint(&origin, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
{
|
|
||||||
vec3 topOrigin = {*worldNearX, *worldNearY, *worldNearZ};
|
|
||||||
vec3 bottomOrigin = {*worldFarX, *worldFarY, *worldFarZ};
|
|
||||||
glDisable(GL_LIGHTING);
|
|
||||||
|
|
||||||
// x z plane
|
|
||||||
glBegin(GL_LINES);
|
|
||||||
glColor3f(0.0, 0.0, 0.0);
|
|
||||||
glVertex3f(topOrigin.x, topOrigin.y, topOrigin.z);
|
|
||||||
glVertex3f(bottomOrigin.x, bottomOrigin.y, bottomOrigin.z);
|
|
||||||
glEnd();
|
|
||||||
|
|
||||||
glEnable(GL_LIGHTING);
|
|
||||||
//drawCylinder(&topOrigin, &bottomOrigin, 0.1, 36, 24);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#include "../data/bmesh_test_2.h"
|
|
||||||
|
|
||||||
void Render::paintGL() {
|
|
||||||
static bmesh *bm = 0;
|
|
||||||
|
|
||||||
_this = this;
|
|
||||||
debugOutputTop = 0;
|
|
||||||
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
|
||||||
|
|
||||||
glPushMatrix();
|
|
||||||
|
|
||||||
glTranslatef(0, 0, -cameraDistance);
|
|
||||||
glRotatef(cameraAngleX, 1, 0, 0);
|
|
||||||
glRotatef(cameraAngleY, 0, 1, 0);
|
|
||||||
|
|
||||||
glColor3f(0, 0, 0);
|
|
||||||
drawDebugPrintf("cameraAngleX:%f cameraAngleY:%f cameraDistance:%f",
|
|
||||||
cameraAngleX, cameraAngleY, cameraDistance);
|
|
||||||
|
|
||||||
screenCoordsToWorld(_this->mouseX, _this->mouseY,
|
|
||||||
&_this->mouseWorldNearX, &_this->mouseWorldNearY, &_this->mouseWorldNearZ,
|
|
||||||
&_this->mouseWorldFarX, &_this->mouseWorldFarY, &_this->mouseWorldFarZ);
|
|
||||||
glColor3f(0.0f, 0.0f, 0.0f);
|
|
||||||
drawDebugPrintf("%d,%d -> %f,%f,%f %f,%f,%f", _this->mouseX, _this->mouseY,
|
|
||||||
_this->mouseWorldNearX, _this->mouseWorldNearY, _this->mouseWorldNearZ,
|
|
||||||
_this->mouseWorldFarX, _this->mouseWorldFarY, _this->mouseWorldFarZ);
|
|
||||||
|
|
||||||
drawGrid(10, 1);
|
|
||||||
|
|
||||||
glEnable(GL_LIGHTING);
|
|
||||||
|
|
||||||
if (0 == bm) {
|
|
||||||
bmeshBall ball;
|
|
||||||
bmeshBone bone;
|
|
||||||
unsigned int i;
|
|
||||||
bm = bmeshCreate();
|
|
||||||
|
|
||||||
for (i = 0; i < sizeof(bmeshTestBalls) / sizeof(bmeshTestBalls[0]); ++i) {
|
|
||||||
memset(&ball, 0, sizeof(ball));
|
|
||||||
ball.position.x = bmeshTestBalls[i][1];
|
|
||||||
ball.position.y = bmeshTestBalls[i][2];
|
|
||||||
ball.position.z = bmeshTestBalls[i][3];
|
|
||||||
ball.radius = bmeshTestBalls[i][4];
|
|
||||||
ball.type = bmeshTestBalls[i][5];
|
|
||||||
bmeshAddBall(bm, &ball);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < sizeof(bmeshTestBones) / sizeof(bmeshTestBones[0]); ++i) {
|
|
||||||
memset(&bone, 0, sizeof(bone));
|
|
||||||
bone.firstBallIndex = bmeshTestBones[i][0];
|
|
||||||
bone.secondBallIndex = bmeshTestBones[i][1];
|
|
||||||
bmeshAddBone(bm, &bone);
|
|
||||||
}
|
|
||||||
|
|
||||||
bmeshGenerate(bm);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bm) {
|
|
||||||
|
|
||||||
bmeshDraw(bm);
|
|
||||||
|
|
||||||
drawBmeshBallRecursively(bm, bmeshGetRootBall(bm));
|
|
||||||
|
|
||||||
//glBegin(GL_QUADS);
|
|
||||||
drawBmeshBallQuadRecursively(bm, bmeshGetRootBall(bm));
|
|
||||||
//glEnd();
|
|
||||||
|
|
||||||
{
|
|
||||||
int index;
|
|
||||||
/*
|
|
||||||
for (index = 0; index < bmeshGetBallNum(bm); ++index) {
|
|
||||||
bmeshBall *ball = bmeshGetBall(bm, index);
|
|
||||||
drawBmeshBall(bm, ball);
|
|
||||||
}*/
|
|
||||||
|
|
||||||
for (index = 0; index < bmeshGetBoneNum(bm); ++index) {
|
|
||||||
bmeshBone *bone = bmeshGetBone(bm, index);
|
|
||||||
//drawBmeshBone(bm, bone);
|
|
||||||
}
|
|
||||||
/*
|
|
||||||
glColor4f(1.0f, 1.0f, 1.0f, 0.5);
|
|
||||||
glBegin(GL_QUADS);
|
|
||||||
for (index = 0; index < bmeshGetQuadNum(bm); ++index) {
|
|
||||||
quad *q = bmeshGetQuad(bm, index);
|
|
||||||
vec3 normal;
|
|
||||||
int j;
|
|
||||||
vec3Normal(&q->pt[0], &q->pt[1], &q->pt[2], &normal);
|
|
||||||
for (j = 0; j < 4; ++j) {
|
|
||||||
glNormal3f(normal.x, normal.y, normal.z);
|
|
||||||
glVertex3f(q->pt[j].x, q->pt[j].y, q->pt[j].z);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
glEnd();
|
|
||||||
glColor3f(0.0f, 0.0f, 0.0f);
|
|
||||||
for (index = 0; index < bmeshGetQuadNum(bm); ++index) {
|
|
||||||
quad *q = bmeshGetQuad(bm, index);
|
|
||||||
int j;
|
|
||||||
glBegin(GL_LINE_STRIP);
|
|
||||||
for (j = 0; j < 4; ++j) {
|
|
||||||
glVertex3f(q->pt[j].x, q->pt[j].y, q->pt[j].z);
|
|
||||||
}
|
|
||||||
glVertex3f(q->pt[0].x, q->pt[0].y, q->pt[0].z);
|
|
||||||
glEnd();
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//glColor3f(0.0f, 0.0f, 0.0f);
|
|
||||||
//drawTestUnproject();
|
|
||||||
|
|
||||||
glPopMatrix();
|
|
||||||
|
|
||||||
//if (bm) {
|
|
||||||
// bmeshDestroy(bm);
|
|
||||||
// bm = 0;
|
|
||||||
//}
|
|
||||||
}
|
|
||||||
|
|
||||||
void Render::resizeGL(int w, int h) {
|
|
||||||
mouseScaleX = w / width();
|
|
||||||
mouseScaleY = h / height();
|
|
||||||
|
|
||||||
glViewport(0, 0, (GLsizei)w, (GLsizei)h);
|
|
||||||
|
|
||||||
glMatrixMode(GL_PROJECTION);
|
|
||||||
glLoadIdentity();
|
|
||||||
gluPerspective(60.0f, w/h, 1, 1000);
|
|
||||||
|
|
||||||
glMatrixMode(GL_MODELVIEW);
|
|
||||||
glLoadIdentity();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
void drawTestUnproject(void) {
|
|
||||||
float worldX, worldY, worldZ;
|
|
||||||
if (_this) {
|
|
||||||
screenCoordsToWorld(_this->mouseX, _this->mouseY, &worldX, &worldY, &worldZ);
|
|
||||||
glColor3f(0.0f, 0.0f, 0.0f);
|
|
||||||
drawDebugPrintf("%d,%d -> %f,%f,%f", _this->mouseX, _this->mouseY,
|
|
||||||
worldX, worldY, worldZ);
|
|
||||||
}
|
|
||||||
}*/
|
|
||||||
|
|
||||||
void Render::mousePressEvent(QMouseEvent *event) {
|
|
||||||
mouseX = event->x() * mouseScaleX;
|
|
||||||
mouseY = event->y() * mouseScaleY;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Render::mouseMoveEvent(QMouseEvent *event) {
|
|
||||||
int x = event->x() * mouseScaleX;
|
|
||||||
int y = event->y() * mouseScaleY;
|
|
||||||
cameraAngleY += (x - mouseX);
|
|
||||||
cameraAngleX += (y - mouseY);
|
|
||||||
update();
|
|
||||||
mouseX = x;
|
|
||||||
mouseY = y;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Render::wheelEvent(QWheelEvent * event) {
|
|
||||||
cameraDistance -= event->delta() * 0.01f;
|
|
||||||
}
|
|
37
src/render.h
37
src/render.h
|
@ -1,37 +0,0 @@
|
||||||
#ifndef RENDER_H
|
|
||||||
#define RENDER_H
|
|
||||||
|
|
||||||
#include <QGLWidget>
|
|
||||||
|
|
||||||
class Render : public QGLWidget {
|
|
||||||
Q_OBJECT
|
|
||||||
|
|
||||||
public:
|
|
||||||
Render(QWidget *parent = 0);
|
|
||||||
~Render(void);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void initializeGL(void);
|
|
||||||
void paintGL(void);
|
|
||||||
void resizeGL(int width, int height);
|
|
||||||
void mousePressEvent(QMouseEvent *event);
|
|
||||||
void mouseMoveEvent(QMouseEvent *event);
|
|
||||||
void wheelEvent(QWheelEvent * event);
|
|
||||||
|
|
||||||
public:
|
|
||||||
int mouseX;
|
|
||||||
int mouseY;
|
|
||||||
float mouseScaleX;
|
|
||||||
float mouseScaleY;
|
|
||||||
float mouseWorldNearX;
|
|
||||||
float mouseWorldNearY;
|
|
||||||
float mouseWorldNearZ;
|
|
||||||
float mouseWorldFarX;
|
|
||||||
float mouseWorldFarY;
|
|
||||||
float mouseWorldFarZ;
|
|
||||||
float cameraAngleX;
|
|
||||||
float cameraAngleY;
|
|
||||||
float cameraDistance;
|
|
||||||
};
|
|
||||||
|
|
||||||
#endif
|
|
Loading…
Reference in New Issue