#pragma comment(linker, "/subsystem:\"windows\" /entry:\"mainCRTStartup\"") //可去掉控制台窗口
#include "Motion.h"
#define GLUT_DISABLE_ATEXIT_HACK
#define GROUND_SIZE 400.0f
Motion *mptr = new Motion;
static int curr_win;
static int pause = 0;
static int curr_frame_num = 0; //表示当前绘制帧号,在后续绘制中起遍历作用。
static int glbone = 0;
float color = 0.01;
/*************以下为新全局变量***************************************/
int windowWidth = 800, windowHeight = 600;
double cameraNear = 0.1, cameraFar = 1000.0, cameraFovy = 45.0;
double cameraOR = 100.0, cameraOH = 0.0, cameraOV = 30.0;
int mouseOX, mouseOY;
double cameraR, cameraH, cameraV;
double cameraTR, cameraTH, cameraTV;
int systemPaused = 0, cameraSetting = 0, sliding = 0, cameraTracking = 0;
int trajectory = 0, tBone = 0, showJoints = 0;
int testSwitch = 0;
//Timer fps;
double framerate = 100.0;
float scale = 1.0;
GLubyte boneColor[10][3] = { { 255, 3, 3 },
{ 0, 66, 255 },
{ 28, 230, 185 },
{ 84, 0, 129 },
{ 255, 252, 1 },
{ 125, 125, 125 }, // {254, 138, 14}
{ 32, 192, 0 },
{ 229, 91, 176 },
{ 97, 52, 5 },
{ 16, 98, 70 } };
GLuint ground, gtex;
float shadowMatrix[4][4];
GLfloat lightPos[] = { 160.0f, 200.0f, 80.0f, 1.0f };
GLfloat groundMat[] = { 0.8f, 0.8f, 0.8f, 0.8f };
GLfloat groundSpec[] = { 1.0f, 1.0f, 1.0f, 1.0f };
GLfloat groundShininess[] = { 16.0f };
GLfloat defSpec[] = { 0.0f, 0.0f, 0.0f, 1.0f };
GLfloat defShininess[] = { 0.0f };
//Posture poseList[MAX_MOVES_IN_AMC_FILE + 1];
//Posture poseList1[MAX_MOVES_IN_AMC_FILE + 1];
//Posture poseListTransform[MAX_MOVES_IN_AMC_FILE + 1];
int poseNum;
//Skeleton sk, skStandard;
int frame;
/*************以上为新全局变量***************************************/
/******************************void computeShadowMatrix(void)**********************************************************/
void computeShadowMatrix(void)
{
shadowMatrix[0][0] = lightPos[1];
shadowMatrix[1][0] = -lightPos[0];
shadowMatrix[2][0] = 0.0f;
shadowMatrix[3][0] = 0.0f;
shadowMatrix[0][1] = 0.0f;
shadowMatrix[1][1] = 0.0f;
shadowMatrix[2][1] = 0.0f;
shadowMatrix[3][1] = 0.0f;
shadowMatrix[0][2] = 0.0f;
shadowMatrix[1][2] = -lightPos[2];
shadowMatrix[2][2] = lightPos[1];
shadowMatrix[3][2] = 0.0f;
shadowMatrix[0][3] = 0.0f;
shadowMatrix[1][3] = -1.0f;
shadowMatrix[2][3] = 0.0f;
shadowMatrix[3][3] = lightPos[1];
}
/*********************************void initializeGL(void)*******************************************************/
void initializeGL(void)
{
printf("Vendor: %s\n", glGetString(GL_VENDOR));
printf("Renderer: %s\n", glGetString(GL_RENDERER));
printf("Version: %s\n", glGetString(GL_VERSION));
printf("\n");
glEnable(GL_DEPTH_TEST);
glEnable(GL_LIGHT0);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
cameraR = cameraOR; cameraH = cameraOH; cameraV = cameraOV;//当前的camera设定为 camere0R
computeShadowMatrix();
int i, j;
GLubyte image[64][64][4]; //设定一个棋盘形状的图片。
for (i = 0; i < 64; i++) {
for (j = 0; j < 64; j++) {
if (((i & 0x4) == 0) ^ ((j & 0x4) == 0)) {
image[i][j][0] = 255;
image[i][j][1] = 255;
image[i][j][2] = 255;
}
else {
image[i][j][0] = 128;
image[i][j][1] = 128;
image[i][j][2] = 128;
}
image[i][j][3] = 255;
}
}
glGenTextures(1, >ex);
glBindTexture(GL_TEXTURE_2D, gtex);
/***********这里的四种纹理参数设置****************************************************************/
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
/*******************************************************************************************************/
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 64, 64, 0, GL_RGBA, GL_UNSIGNED_BYTE, image);
}
/*********************************void initializeLists(void)********************************************************************/
void initializeLists(void)
{
ground = glGenLists(1);
glNewList(ground, GL_COMPILE);
glEnable(GL_LIGHTING);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, gtex);
/************下面三行代码用于设计地面材质的显示方式******************/
glMaterialfv(GL_FRONT, GL_AMBIENT_AND_DIFFUSE, groundMat);
glMaterialfv(GL_FRONT, GL_SPECULAR, groundSpec);
glMaterialfv(GL_FRONT, GL_SHININESS, groundShininess);
/**************************************************************************/
glPolygonMode(GL_BACK, GL_LINE); //从下往上可以透视看
glBegin(GL_QUADS); //画地板
glNormal3f(0.0f, 1.0f, 0.0f);
glTexCoord2f(0.0f, 0.0f);
glVertex3f(-0.5f * GROUND_SIZE, 0.0f, 0.5f * GROUND_SIZE);
glNormal3f(0.0f, 1.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f);
glVertex3f(0.5f * GROUND_SIZE, 0.0f, 0.5f * GROUND_SIZE);
glNormal3f(0.0f, 1.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f);
glVertex3f(0.5f * GROUND_SIZE, 0.0f, -0.5f * GROUND_SIZE);
glNormal3f(0.0f, 1.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f);
glVertex3f(-0.5f * GROUND_SIZE, 0.0f, -0.5f * GROUND_SIZE);
glEnd();
/*****:上一段代码用于画地板1。设定地板的背面用线画,所以可以从地板下看到地板上,2.将纹理赋予地板*****/
glPolygonMode(GL_BACK, GL_FILL); //骨架成网状模型,与GL_LINE
glMaterialfv(GL_FRONT, GL_SPECULAR, defSpec);
glMaterialfv(GL_FRONT, GL_SHININESS, defShininess);
glDisable(GL_TEXTURE_2D);
glDisable(GL_LIGHTING);
/***:上一段代码用于设计骨架的现实方式,骨架背面用面显示。***********/
glEndList();
}
void render(void)
{
int i;
if (showJoints) {
if (cameraV > 0) {
glColor3ubv(boneColor[0]);
for (i = 0; i <mptr->skeletons[0].bone_num; i++) {
glPushMatrix();
// glTranslatef(-mptr->skeletons[curr_frame_num].bones[i].dof[0], -mptr->skeletons[curr_frame_num].bones[i].dof[1], mptr->skeletons[curr_frame_num].bones[i].dof[0]);
glutSolidSphere(0.2, 16, 16);
glPopMatrix();
}
}
glEnable(GL_BLEND);
glCallList(ground);
glDisable(GL_BLEND);
glDisable(GL_DEPTH_TEST);
glEnable(GL_BLEND);
glColor4f(0.0f, 0.0f, 0.0f, 0.25f);
glPushMatrix();
glMultMatrixf((GLfloat *)shadowMatrix);
/* for (i = 0; i < sk.boneNum; i++) {
glPushMatrix();
glTranslatef(poseList[frame].x[i][0],poseList[frame].x[i][1], poseList[frame].x[i][2]);
glutSolidSphere(0.2, 16, 16);
glPopMatrix();
}*/
glPopMatrix();
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glDisable(GL_BLEND);
glEnable(GL_DEPTH_TEST);
if (trajectory) {
glColor3ubv(boneColor[0]);
glBegin(GL_LINE_STRIP);
for (i = 1; i <= frame; i++) {
// glVertex3fv(poseList[i].x[tBone]);
}
glEnd();
}
glColor3ubv(boneColor[0]);
/* for (i = 0; i < sk.boneNum; i++) {
glPushMatrix();
glTranslatef(poseList[frame].x[i][0],poseList[frame].x[i][1], poseList[frame].x[i][2]);
glutSolidSphere(0.2, 16, 16);
glPopMatrix();
}*/
}
else {
if (cameraV > 0) {
glPushMatrix();
glScalef(1.0f, -1.0f, 1.0f);
glEnable(GL_LIGHTING);
glEnable(GL_COLOR_MATERIAL);
glEnable(GL_NORMALIZE);
glColor3ubv(boneColor[5]); //变倒影的颜色
/************************在下面加入代码可以画出地面反射的效果****************************************************************/
// glPushAttrib(GL_ALL_ATTRIB_BITS);
// glPushMatrix();
// glColor3ub(255, 3, 3);
// glScalef(1,1,1);
// glTranslatef(mptr->skeletons[curr_frame_num].bones[0].global_coord.x,
// mptr->skeletons[curr_frame_num].bones[0].global_coord.y,
// mptr->skeletons[curr_frame_num].bones[0].global_coord.z);
// glTranslatef(-mptr->skeletons[curr_frame_num].bones[0].direc.x*mptr->skeletons[curr_frame_num].bones[0].length,
没有合适的资源?快使用搜索试试~ 我知道了~
ASF/AMC文件骨架读取并显示程序源码
共41个文件
tlog:6个
ipch:6个
obj:5个
需积分: 50 17 下载量 105 浏览量
2018-04-04
20:25:24
上传
评论 1
收藏 52.63MB ZIP 举报
温馨提示
ASF/AMC文件读取并以图形化界面显示骨架运动情况。本源码只实现部分功能,其他后续工作待定。
资源推荐
资源详情
资源评论
收起资源包目录
Test2.zip (41个子文件)
Test2
.vs
Test2
v15
Browse.VC.db 35.1MB
.suo 41KB
ipch
AutoPCH
a19fe3c47acd2c45
VECTOR.ipch 34.63MB
4514d1762888b11a
MOTION.ipch 36.44MB
7e126b000d017297
MAIN.ipch 36.44MB
f49c8a58c7059fc1
BONE.ipch 34.56MB
87f7448eccc21f2d
SKELETON.ipch 34.63MB
d0133584331a2262
BONE.ipch 34.63MB
Test2
Motion.cpp 9KB
Test2.vcxproj.filters 2KB
Skeleton.cpp 13KB
Motion.h 911B
Bone.cpp 429B
VECTOR.h 1KB
22.asf 7KB
Skeleton.h 2KB
main.cpp 27KB
Test2.vcxproj 6KB
VECTOR.cpp 5KB
Debug
Bone.obj 104KB
Motion.obj 857KB
Skeleton.obj 47KB
Test2.log 138B
main.obj 310KB
Test2.tlog
Test2.lastbuildstate 195B
CL.write.1.tlog 4KB
CL.read.1.tlog 102KB
CL.command.1.tlog 3KB
link.write.1.tlog 654B
link.command.1.tlog 1KB
link.read.1.tlog 5KB
vc141.idb 283KB
VECTOR.obj 67KB
vc141.pdb 644KB
Bone.h 981B
Test2.vcxproj.user 165B
22_01.AMC 609KB
Test2.sln 1KB
Debug
Test2.pdb 1.04MB
Test2.ilk 1.05MB
Test2.exe 238KB
共 41 条
- 1
资源评论
sinat_32015107
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功