版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、#include total.h#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define GLUT_DISABLE_ATEXIT_HACK #define FILE_NAME feiji.3DS/指定对应的 FILE NAME#define SCREEN_WIDTH 800#define SCREEN_HEIGHT 600#define SCREEN_DEPTH 16#define MA
2、X_TEXTURES 100/ 最大的纹理数目#define PRIMARY 0x4D4D/ 基本块(Primary Chunk),位于文件的开始/ 主块(Main Chunks)#define OBJECTINFO 0x3D3D/ 网格对象的版本号#define VERSION 0x0002/ .3ds文件的版本#define EDITKEYFRAME 0xB000/ 所有关键帧信息的头部/ 对象的次级定义(包括对象的材质和对象)#define MATERIAL 0xAFFF/ 保存纹理信息#define OBJECT 0x4000/ 保存对象的面、顶点等信息/ 材质的次级定义#define
3、 MATNAME 0xA000/ 保存材质名称#define MATDIFFUSE 0xA020/ 对象/材质的颜色#define MATMAP 0xA200/ 新材质的头部#define MATMAPFILE 0xA300/ 保存纹理的文件名#define OBJECT_MESH 0x4100/ 新的网格对象/ OBJECT_MESH的次级定义#define OBJECT_VERTICES 0x4110/ 对象顶点#define OBJECT_FACES0x4120/ 对象的面#define OBJECT_MATERIAL0x4130/ 对象的材质#define OBJECT_UV0x414
4、0/ 对象的UV纹理坐标int g_ViewMode = GL_TRIANGLES;bool g_bLighting = true;float g_Rotatex = 0;float g_Rotatey = 0;float g_Rotatez = 0;float g_x =0;float g_y =0;float g_z =0;/。定义需要导入的数据float Rotatex ;float Rotatey ;float Rotatez ;float x ;float y ;float z ;double gl_x; double gl_y; double gl_z; double gl_pit
5、ch; double gl_roll; double gl_yaw;double gl_wcpitch;double gl_wcroll;double gl_wcyaw;using namespace std;UINT g_TextureMAX_TEXTURES = 0;HWND g_hWnd;RECT g_rRect;HDC g_hDC;HGLRC g_hRC;HINSTANCE g_hInstance;HINSTANCE hInstance;MMRESULT idtimer_Opengl; HWND CreateMyWindow(LPSTR strWindowName, int width
6、, int height, DWORD dwStyle, HINSTANCE hInstance);/ 生成用户窗口LRESULT CALLBACK WinProc(HWND gl_hwnd, UINT message, WPARAM wParam, LPARAM lParam);/消息响应void Init(HWND gl_hWnd);/ 初始化整个程序void InitializeOpenGL(int width, int height);/ 初始化OpenGLbool bSetupPixelFormat(HDC hdc);/ 设置像素格式void SizeOpenGLScreen(int
7、 width, int height);/ 初始化投影变换int MainLoop();/主循环void RenderScene(double gl_x, double gl_y, double gl_z, double gl_roll, double gl_pitch, double gl_yaw) ;void DeInit();/ 释放程序占用的内存空间void myDisplaycube();/绘制外框架void glprintf();/输出文字/-定义结构变量-/ 定义3D点的类,用于保存模型中的顶点class CVector3 public:float x, y, z;/ 定义2D点
8、类,用于保存模型的UV纹理坐标class CVector2 public:float x, y;/ 面的结构定义struct tFaceint vertIndex3;/ 顶点索引int coordIndex3;/ 纹理坐标索引;/ 材质信息结构体struct tMaterialInfochar strName255;/ 纹理名称char strFile255;/ 如果存在纹理映射,则表示纹理文件名称BYTE color3;/ 对象的RGB颜色int texureId;/ 纹理IDfloat uTile;/ u 重复float vTile;/ v 重复float uOffset; / u 纹理偏
9、移float vOffset;/ v 纹理偏移 ;/ 对象信息结构体struct t3DObject int numOfVerts;/ 模型中顶点的数目int numOfFaces;/ 模型中面的数目int numTexVertex;/ 模型中纹理坐标的数目int materialID;/ 纹理IDchar strName255;/ 对象的名称CVector3 *pVerts;/ 对象的顶点CVector3 *pNormals;/ 对象的法向量CVector2 *pTexVerts;/ 纹理UV坐标tFace *pFaces;/ 对象的面信息;/ 模型信息结构体struct t3DModel
10、int numOfObjects;/ 模型中对象的数目int numOfMaterials;/ 模型中材质的数目vector pMaterials;/ 材质链表信息vector pObject;/ 模型中对象链表信息;struct tIndices unsigned short a, b, c, bVisible;/ 保存块信息的结构struct tChunkunsigned short int ID;/ 块的IDunsigned int length;/ 块的长度unsigned int bytesRead;/ 需要读的块数据的字节数;/ CLoad3DS类处理所有的装入代码class CL
11、oad3DSpublic:/可以被该类中的函数、子类的函数、其友元函数访问,也可以由该类的对象访问CLoad3DS();/ 初始化数据成员/ 装入3ds文件到模型结构中bool Import3DS(t3DModel *pModel, char *strFileName);/只能由该类中的函数、其友元函数访问,不能被任何其他访问,该类的对象也不能访问/ 读一个字符串int GetString(char *);/ 读下一个块void ReadChunk(tChunk *);/ 读下一个块void ProcessNextChunk(t3DModel *pModel, tChunk *);/ 读下一个
12、对象块void ProcessNextObjectChunk(t3DModel *pModel, t3DObject *pObject, tChunk *);/ 读下一个材质块void ProcessNextMaterialChunk(t3DModel *pModel, tChunk *);/ 读对象颜色的RGB值void ReadColorChunk(tMaterialInfo *pMaterial, tChunk *pChunk);/ 读对象的顶点void ReadVertices(t3DObject *pObject, tChunk *);/ 读对象的面信息void ReadVertex
13、Indices(t3DObject *pObject, tChunk *);/ 读对象的纹理坐标void ReadUVCoordinates(t3DObject *pObject, tChunk *);/ 读赋予对象的材质名称void ReadObjectMaterial(t3DModel *pModel, t3DObject *pObject, tChunk *pPreviousChunk);/ 计算对象顶点的法向量void ComputeNormals(t3DModel *pModel);/ 关闭文件,释放内存空间void CleanUp();/ 文件指针FILE *m_FilePoint
14、er;tChunk *m_CurrentChunk;/当前块tChunk *m_TempChunk;/下一个块;CLoad3DS g_Load3ds;t3DModel g_3DModel;/.程序函数.int OpenGL_Main()/入口程序 gl_hWnd=CreateMyWindow(飞机动态飞行模拟, SCREEN_WIDTH, SCREEN_HEIGHT, 0, hInstance);if(gl_hWnd = NULL) return true; Init(gl_hWnd);/ 初始化整个程序 MainLoop(); return 0; /创建窗口HWND CreateMyWind
15、ow(LPSTR strWindowName, int width, int height, DWORD dwStyle, HINSTANCE hInstance)HWND gl_hWnd;WNDCLASS wndclass;/*wndclass用来保存我们的窗口类的结构。窗口类结构中保存着我们的窗口信息。 通过改变类的不同字段我们可以改变窗口的外观和行为。 每个窗口都属于一个窗口类。当您创建窗口时,您必须为窗口注册类。*/memset(&wndclass, 0, sizeof(WNDCLASS);wndclass.style = CS_HREDRAW | CS_VREDRAW;/设置窗口风格
16、wndclass.lpfnWndProc = WinProc;/ WndProc处理消息其实就是键盘响应 wndclass.hInstance = hInstance;/ 设置实例wndclass.hIcon = LoadIcon(NULL, IDI_APPLICATION);/ 装入缺省图标 要使用windows预定义的图标,这时hInstance必须设置成NULLwndclass.hCursor = LoadCursor(NULL, IDC_ARROW);/ 装入鼠标指针wndclass.hbrBackground = (HBRUSH) (COLOR_WINDOW+1);/设置opengl
17、的背景色wndclass.lpszClassName = opengl;/只是设定一个类型名RegisterClass(&wndclass);/注册窗口的 if(!dwStyle)dwStyle = WS_OVERLAPPEDWINDOW | WS_CLIPSIBLINGS | WS_CLIPCHILDREN;/拓展窗口风格的/*WS_CLIPCHILDREN裁剪子窗口。就是不绘制与子窗口重合的父窗口部分子窗口间相互裁减。当两个窗口相互重叠时,设置了WS_CLIPSIBLINGS样式的子窗口重绘时不能绘制被重叠的部分。WS_OVERLAPPEDWINDOW可以创建一个拥有各种窗口风格的窗体,包
18、括标题,系统菜单,边框,最小化和最大化按钮等*/g_hInstance = hInstance;RECT rWindow;/ 取得矩形的左上角和右下角的坐标值rWindow.left= 0;/将Left 设为 0rWindow.right= width;/宽度rWindow.top = 0;rWindow.bottom= height;/高度AdjustWindowRect( &rWindow, dwStyle, false);/该函数依据所需计算需要的窗口矩形的大小随后传递给CreateWindow函数,用于创建一个客户区所需大小的窗口。gl_hWnd = CreateWindow(open
19、gl, strWindowName, dwStyle, 0, 0,rWindow.right - rWindow.left, rWindow.bottom - rWindow.top, NULL, / 无父窗口NULL,/无菜单 hInstance,/实例NULL);/不向WM_CREATE传递信息if(!gl_hWnd) return NULL ;ShowWindow(gl_hWnd, SW_SHOWNORMAL);/该函数设置指定窗口的显示状态 SW_SHOWNORMAL运行时正常大小显示 UpdateWindow(gl_hWnd);/指定客户区SetFocus(gl_hWnd);/设置键
20、盘焦点return gl_hWnd;LRESULT CALLBACK WinProc(HWND gl_hWnd,UINT uMsg, WPARAM wParam, LPARAM lParam)/窗口响应 static int cxClient,cyClient; LONG lRet = 0; switch (uMsg) case WM_SIZE:/用于控制窗口的形状变化 cxClient = LOWORD(lParam); cyClient = HIWORD(lParam); return 0; case WM_CLOSE: /关闭窗口的响应 ShowWindow(gl_hWnd,SW_HID
21、E) ;/隐藏窗口 break; default: lRet = DefWindowProc (gl_hWnd, uMsg, wParam, lParam); /处理无关消息 break; return lRet;void Init(HWND gl_hWnd)/初始化整个窗口g_hWnd = gl_hWnd;GetClientRect(g_hWnd, &g_rRect);/该函数获取窗口客户区的坐标。InitializeOpenGL(g_rRect.right, g_rRect.bottom);/以hWnd代表的客户区的矩形的宽和高为变量初始化openglg_Load3ds.Import3DS
22、(&g_3DModel, FILE_NAME);/ 将3ds文件装入到模型结构体中glEnable(GL_LIGHT0);/ 使用默认的0号灯glEnable(GL_LIGHTING);/ 使用灯光glEnable(GL_COLOR_MATERIAL); / 使用颜色材质void InitializeOpenGL(int width, int height) / 初始化OpenGL g_hDC = GetDC(g_hWnd); if (!bSetupPixelFormat(g_hDC) PostQuitMessage (0); g_hRC = wglCreateContext(g_hDC);/
23、函数建立一个适合在指定hdc上绘制的RC,RC与DC有相同的像素格式 wglMakeCurrent(g_hDC, g_hRC);glEnable(GL_TEXTURE_2D);/开启2D纹理贴图功能glEnable(GL_DEPTH_TEST);/开启深度测试SizeOpenGLScreen(width, height);bool bSetupPixelFormat(HDC hdc) /设置设置像素格式 PIXELFORMATDESCRIPTOR pfd; int pixelformat; pfd.nSize = sizeof(PIXELFORMATDESCRIPTOR); pfd.nVers
24、ion = 1; pfd.dwFlags = PFD_DRAW_TO_WINDOW | PFD_SUPPORT_OPENGL | PFD_DOUBLEBUFFER; pfd.dwLayerMask = PFD_MAIN_PLANE; pfd.iPixelType = PFD_TYPE_RGBA; pfd.cColorBits = SCREEN_DEPTH; pfd.cDepthBits = SCREEN_DEPTH; pfd.cAccumBits = 0; pfd.cStencilBits = 0; if ( (pixelformat = ChoosePixelFormat(hdc, &pfd
25、) = FALSE ) /获取opengl最佳像素 return FALSE; if (SetPixelFormat(hdc, pixelformat, &pfd) = FALSE) /设置像素格式 return FALSE; return TRUE;void SizeOpenGLScreen(int width, int height)/初始化投影变换if (height=0)height=1;glViewport(0,0,width,height);/设置实际图像映射的像素矩形glMatrixMode(GL_PROJECTION);/指定当前矩阵glLoadIdentity();/变成单位
26、矩阵gluPerspective(45.0f,/角度(GLfloat)width/(GLfloat)height,/视景体的宽高比.5f ,/沿z轴方向的两裁面之间的距离的近处150.0f/沿z轴方向的两裁面之间的距离的远处);/设置透视投影矩阵glMatrixMode(GL_MODELVIEW);glLoadIdentity();int MainLoop()/主循环 MSG msg; while(1)if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE) /该函数为一个消息检查线程消息队列,并将该消息(如果存在)放于指定的结构。 /PM_REMOVE:Pee
27、kMessage处理后,消息从队列里除掉 if(msg.message = WM_CLOSE)break; TranslateMessage(&msg);/键盘码的转化 DispatchMessage(&msg);/分发消息到回调函数,系统通过调用回调函数实现在窗体中实现对应操作 else glprintf();/输出状态文字 gl_x=0;gl_y=0;gl_z=0;gl_wcpitch=wc.pitch;gl_wcroll=wc.roll;gl_wcyaw=wc.yaw;gl_pitch=gl_wcpitch;gl_roll=gl_wcroll;gl_yaw=gl_wcyaw;Render
28、Scene(gl_x,gl_y,gl_z,gl_roll,gl_pitch,gl_yaw);/控制飞机的姿态和观察角度并且对应的在opengl中绘制3ds模型 for(int i = 0; i g_3DModel.numOfObjects; i+)/清空图形的相关变量/ 删除所有的变量delete g_3DModel.pObjecti.pFaces;/对象的面delete g_3DModel.pObjecti.pNormals;/ 给出法向量delete g_3DModel.pObjecti.pVerts;/ 对象的顶点delete g_3DModel.pObjecti.pTexVerts;/
29、 纹理UV坐标DeInit();/ 释放程序占用的内存空间return(msg.wParam);void DeInit()/ 释放程序占用的内存空间if (g_hRC)wglMakeCurrent(NULL, NULL);/用于释放opengl里面的上下文环境 - 渲染上下文句柄为null时才有这个功能wglDeleteContext(g_hRC);/删除渲染内容的句柄if (g_hDC) ReleaseDC(g_hWnd, g_hDC);/函数释放设备上下文环境(DC)供其他应用程序使用UnregisterClass(opengl, g_hInstance);/该函数注销一个窗口类,一类释放
30、所需的内存PostQuitMessage (0);/文字显示void glprintf()char str0100;sprintf(str0, %-08.3lf, wc.pitch);char str_pitch = 俯仰角度:;strcat(str_pitch, str0);SetBkColor(g_hDC,NULL);TextOut(g_hDC,5,5,str_pitch,strlen(str_pitch);SetTextColor(g_hDC,RGB(0,200,0);char str1100;sprintf(str1, %-08.3lf, wc.roll);char str_roll
31、= 滚转角度:;strcat(str_roll, str1);SetBkColor(g_hDC,NULL);TextOut(g_hDC,5,20,str_roll,strlen(str_roll);SetTextColor(g_hDC,RGB(0,200,0);char str2100;sprintf(str2, %-08.3lf, wc.yaw);char str_yaw = 偏航角度:;strcat(str_yaw, str2);SetBkColor(g_hDC,NULL);TextOut(g_hDC,5,35,str_yaw,strlen(str_yaw);SetTextColor(g_
32、hDC,RGB(0,200,0);char str3100;sprintf(str3, %-08.3lf, x);char str_x = X轴位移: ;strcat(str_x, str3);SetBkColor(g_hDC,NULL);TextOut(g_hDC,5,60,str_x,strlen(str_x);SetTextColor(g_hDC,RGB(0,200,0);char str4100;sprintf(str4, %-08.3lf, y);char str_y = Y轴位移: ;strcat(str_y, str4);SetBkColor(g_hDC,NULL);TextOu
33、t(g_hDC,5,75,str_y,strlen(str_y);SetTextColor(g_hDC,RGB(0,200,0);char str5100;sprintf(str5, %-08.3lf, z);char str_z = Z轴位移: ;strcat(str_z, str5);SetBkColor(g_hDC,NULL);TextOut(g_hDC,5,90,str_z,strlen(str_z);SetTextColor(g_hDC,RGB(0,200,0);void RenderScene(double gl_x, double gl_y, double gl_z, doubl
34、e gl_roll, double gl_pitch, double gl_yaw) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);/清除颜色缓冲以及深度缓冲glLoadIdentity();/设置为单位矩阵gluLookAt(1.2,1.2,-1.2,0, 0, 0,-1,-1,-1);/设置观察坐标,视点坐标,视线朝向glPushMatrix();myDisplaycube();glPopMatrix();/绘制外部正方体框架 g_x=gl_x; g_y=gl_y; g_z=gl_z;g_Rotatex=gl_roll;g_Rotat
35、ey= gl_pitch;g_Rotatez=gl_yaw; glTranslatef(g_x,g_y,g_z);/机翼是y方向从机头前方看右侧有正,机身前后方向是x机头方向为正方向 ,机身垂直是z向下为正方向glRotatef(g_Rotatex,1.0f, 0, 0);/是飞机roll的角度 glRotatef(g_Rotatey, 0, 1.0f, 0);/pitch的角度 glRotatef(g_Rotatez, 0, 0,1.0f);/yaw的角度glPushMatrix(); /将当前变换矩阵(单位阵)压入堆栈 glPopMatrix(); / 遍历模型中所有的对象(将显示列表里的
36、信息显示出来)for(int i = 0; i g_3DModel.numOfObjects; i+)/ 如果模型中没有对应的对象,则退出if(g_3DModel.pObject.size() = 0) break;/ 获得当前显示的对象t3DObject *pObject = &g_3DModel.pObjecti;glBegin(g_ViewMode);/ 开始以g_ViewMode模式绘制/ 遍历所有的面for(int j = 0; j numOfFaces; j+)/ 遍历三角形的所有点for(int whichVertex = 0; whichVertex pFacesj.vertI
37、ndexwhichVertex;/ 给出法向量glNormal3f(pObject-pNormals index .x, pObject-pNormals index .y, pObject-pNormals index .z);glVertex3f(pObject-pVerts index .x, pObject-pVerts index .y, pObject-pVerts index .z);glEnd();/ 绘制结束Sleep(60);/为了降低opengl的cpu占用率,降低刷新频率SwapBuffers(g_hDC);/ 交换缓冲区void myDisplaycube()/绘制矩
38、形边框glColor3f(1.0f, 1.0f, 1.0f);static const GLfloat vertex_list3 = -0.41f, -0.39f, -0.52f, 0.41f, -0.39f, -0.52f, -0.41f, 0.39f, -0.52f, 0.41f, 0.39f, -0.52f, -0.41f, -0.39f, 0.52f, 0.41f, -0.39f, 0.52f, -0.41f, 0.39f, 0.52f, 0.41f, 0.39f, 0.52f,;glBegin(GL_LINE_LOOP); glVertex3fv(vertex_list0); glV
39、ertex3fv(vertex_list2); glVertex3fv(vertex_list3); glVertex3fv(vertex_list1);glEnd();glBegin(GL_LINE_LOOP); glVertex3fv(vertex_list0); glVertex3fv(vertex_list4); glVertex3fv(vertex_list5); glVertex3fv(vertex_list1);glEnd();glBegin(GL_LINE_LOOP); glVertex3fv(vertex_list0); glVertex3fv(vertex_list4);
40、glVertex3fv(vertex_list6); glVertex3fv(vertex_list2);glEnd();glBegin(GL_LINE_LOOP); glVertex3fv(vertex_list2); glVertex3fv(vertex_list6); glVertex3fv(vertex_list7); glVertex3fv(vertex_list3);glEnd();glBegin(GL_LINE_LOOP); glVertex3fv(vertex_list3); glVertex3fv(vertex_list7); glVertex3fv(vertex_list5
41、); glVertex3fv(vertex_list1);glEnd();glBegin(GL_LINE_LOOP); glVertex3fv(vertex_list5); glVertex3fv(vertex_list7); glVertex3fv(vertex_list6); glVertex3fv(vertex_list4);glEnd();glPointSize(5.0f); glFlush();/导入3ds文件部分,生成显示列表部分/ 构造函数的功能是初始化tChunk数据,分配内存空间CLoad3DS:CLoad3DS()m_CurrentChunk = new tChunk;/
42、初始化并为当前的块分配空间m_TempChunk = new tChunk;/ 初始化一个临时块并分配空间/ 打开一个3ds文件,读出其中的内容,并释放内存bool CLoad3DS:Import3DS(t3DModel *pModel, char *strFileName)char strMessage255 = 0;m_FilePointer = fopen(strFileName, rb);/ 打开一个3ds文件ReadChunk(m_CurrentChunk);/读出块的id和块的sizeProcessNextChunk(pModel, m_CurrentChunk);/ 现在开始读入
43、数据,ProcessNextChunk()是一个递归函数 通过调用下面的递归函数,将对象读出ComputeNormals(pModel);/ 在读完整个3ds文件之后,计算顶点的法线CleanUp();/ 释放内存空间return true;void CLoad3DS:CleanUp()/ 下面的函数释放所有的内存空间,并关闭文件fclose(m_FilePointer);/ 关闭当前的文件指针delete m_CurrentChunk;/ 释放当前块delete m_TempChunk;/ 释放临时块/*fread函数的功能是从一个文件流中读数据,读取count个元素,每个元素size字节.
44、如果调用成功返回count.如果调用成功则实际读取size*count字节*/ 下面的函数读出3ds文件的主要部分void CLoad3DS:ProcessNextChunk(t3DModel *pModel, tChunk *pPreviousChunk)t3DObject newObject = 0;/ 用来添加到对象链表unsigned int version = 0;/ 保存文件版本int buffer50000 = 0;/ 用来跳过不需要的数据m_CurrentChunk = new tChunk;/ 为新的块分配空间while (pPreviousChunk-bytesRead l
45、ength)/ 读入下一个块ReadChunk(m_CurrentChunk);/ 判断块的ID号switch (m_CurrentChunk-ID)case VERSION:/ 读入文件的版本号,并将字节数添加到bytesRead变量中m_CurrentChunk-bytesRead += fread(&version, 1, m_CurrentChunk-length - m_CurrentChunk-bytesRead, m_FilePointer); if (version 0x03)/ 如果文件版本号大于3,给出一个警告信息MessageBox(NULL, This 3DS file
46、 is over version 3 so it may load incorrectly, Warning, MB_OK);break; case OBJECTINFO:/网格对象的信息ReadChunk(m_TempChunk);m_TempChunk-bytesRead += fread(&version, 1, m_TempChunk-length - m_TempChunk-bytesRead, m_FilePointer);m_CurrentChunk-bytesRead += m_TempChunk-bytesRead;ProcessNextChunk(pModel, m_CurrentChunk);break;case OBJECT:/ 对象的名称/ 该块是对象信息块的头部,保存了对象了名称/ 对象数递增pModel-numOfObjects+;/ 添
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重冶湿法冶炼工改进能力考核试卷含答案
- 复合材质文物修复师安全知识竞赛测试考核试卷含答案
- 人工影响天气特种作业操作员风险识别强化考核试卷含答案
- 数控组合机床操作工岗中安全宣传考核试卷含答案
- 汽车车身涂装修复工岗中技术传承考核试卷含答案
- 禽兽类动物标本采集制作工技术水平测试考核试卷含答案
- 并条工安全生产能力知识考核试卷含答案
- 农村电商助农乡村振兴方案
- 混凝土搅拌车智能物流分析方案
- 互联网保险行业技术创新与产品迭代可行性研究报告
- 2026年基层公共就业服务培训试卷及答案
- 2026年ISO9001内审员考试真题及答案解析
- (完整版)PE聚乙烯
- 中欧关系现状与发展趋势
- 2026山东青岛市财通集团有限公司招聘27人考试参考题库及答案解析
- 小学数学课堂中生成式人工智能辅助教师教学问题解决研究教学研究课题报告
- 国旗法与国徽法课件
- GB/T 31439.2-2025波形梁钢护栏第2部分:三波形梁钢护栏
- 人教版八年级历史上册第一次月考试卷(附答案)
- 钢化玻璃栏板安装施工方案
- 《公安机关人民警察内务条令》知识题库
评论
0/150
提交评论