当前位置: 首页 > news >正文

网站开发项目需求分析做婚庆网站

网站开发项目需求分析,做婚庆网站,商务网站设计制作好的工具和方法,wordpress 七牛 图床文章目录 前言一、实现旋转的3D 立法体需要用到的技术1. 模型矩阵2. 视图矩阵3. 投影矩阵4. 背面剔除二、opengles3.0 渲染旋转的 3D 立方体实例1. egl_wayland_cube3_0.c2. Matrix.h 和 Matrix.c3. xdg-shell-client-protocol.h 和 xdg-shell-protocol.c4. 编译5. 运行总结参考… 文章目录 前言一、实现旋转的3D 立法体需要用到的技术1. 模型矩阵2. 视图矩阵3. 投影矩阵4. 背面剔除 二、opengles3.0 渲染旋转的 3D 立方体实例1. egl_wayland_cube3_0.c2. Matrix.h 和 Matrix.c3. xdg-shell-client-protocol.h 和 xdg-shell-protocol.c4. 编译5. 运行 总结参考资料 前言 本文主要介绍如果使用 wayland(xdg_wm_base) + egl + opengles3.0 绘制一个绕Y轴旋转的正方体,涉及顶点坐标变化,模型,视图,投影矩阵等相关内容 软硬件环境: 硬件:PC 软件:ubuntu22.04 egl1.4 opengles3.0 weston9.0 一、实现旋转的3D 立法体需要用到的技术 绘制一个绕Y轴旋转的正方体,涉及顶点坐标变化,模型,视图,投影矩阵以及背面剔除等相关内容 1. 模型矩阵 要实现旋转,故需要使用一个矩阵来实现,在这里直接使用Matrix.c 中封装好的如下接口即可 matrixRotateX(modelMatrix, angleX); matrixRotateY(modelMatrix, angleY); matrixRotateZ(modelMatrix, angleZ);2. 视图矩阵 默认的视点是在坐标(0,0,0)处(即在立方体内部),为了看到立方体的全貌,需要将视点沿着Z轴正方向移动(移动到立方体外面),也需要使用一个矩阵来实现,在这里直接使用Matrix.c 中封装好的如下接口即可 matrixTranslate(viewMatrix, 0.0f, 0.0f, -7.0f); //视点沿着Z轴移动到Z坐标为7处移动的距离越远,立方体看上去会越小,出现缩放的效果 3. 投影矩阵 由于使用视图矩阵将视点移动到Z坐标为7(7 大于1,超出了可视范围)处,故需要使用投影矩阵,否则会看不到立方体,也需要使用一个矩阵来实现,在这里直接使用Matrix.c 中封装好的如下接口即可 /* Setup the perspective */matrixPerspective(projectionMatrix, 45, (float)width / (float)height, 0.1f, 100); //角度为45°4. 背面剔除 opengles3.0 默认背面剔除功能是关闭的,需要使能, 否则立方体的正面会不显示(透视),直接调用如下语句即可 glEnable(GL_CULL_FACE); //enable back face cull这里需要注意一下,在OpenGLES中,所绘制的图形是通过一个个的三角形组合成的。OpenGLES通过分析顶点数据的顺序得知哪些面是正面、哪些面是背面。默认规则: 正面:按照逆时针顶点连接顺序的三角形面 背面:按照顺时针顶点连接书序的三角形面 顺时针或逆时针:由观察者的方向来确定 正面和背面是由三角形的顶点顺序和观察者方向共同决定的,随着观察者的角度变化,正背面也会跟着改变,这也与现实中的情况相吻合。 二、opengles3.0 渲染旋转的 3D 立方体实例 1. egl_wayland_cube3_0.c egl_wayland_cube3_0.c 代码如下: #include wayland-client.h #include wayland-server.h #include wayland-egl.h #include EGL/egl.h #include GLES3/gl3.h #include stdio.h #include stdlib.h #include string.h #include "Matrix.h" #include "xdg-shell-client-protocol.h"#define WIDTH 800 #define HEIGHT 600struct wl_display *display = NULL; struct wl_compositor *compositor = NULL; struct xdg_wm_base *wm_base = NULL; struct wl_registry *registry = NULL;struct window {struct wl_surface *surface;struct xdg_surface *xdg_surface;struct xdg_toplevel *xdg_toplevel;struct wl_egl_window *egl_window; };//opengles global varGLuint projectionLocation; GLuint modelLocation; GLuint viewLocation; GLuint simpleCubeProgram; float projectionMatrix[16]; float modelMatrix[16]; float viewMatrix[16]; float angleX = 30.0f; float angleY = 0.0f; float angleZ = 0.0f;static void xdg_wm_base_ping(void *data, struct xdg_wm_base *shell, uint32_t serial) {xdg_wm_base_pong(shell, serial); }/*for xdg_wm_base listener*/ static const struct xdg_wm_base_listener wm_base_listener = {xdg_wm_base_ping, };/*for registry listener*/ static void registry_add_object(void *data, struct wl_registry *registry, uint32_t name, const char *interface, uint32_t version) {if (!strcmp(interface, "wl_compositor")) {compositor = wl_registry_bind(registry, name, wl_compositor_interface, 1);} else if (strcmp(interface, "xdg_wm_base") == 0) {wm_base = wl_registry_bind(registry, name,xdg_wm_base_interface, 1);xdg_wm_base_add_listener(wm_base, wm_base_listener, NULL);} }void registry_remove_object(void *data, struct wl_registry *registry, uint32_t name) {}static struct wl_registry_listener registry_listener = {registry_add_object, registry_remove_object};static void handle_surface_configure(void *data, struct xdg_surface *surface,uint32_t serial) {//struct window *window = data;xdg_surface_ack_configure(surface, serial);//window-wait_for_configure = false; }static const struct xdg_surface_listener xdg_surface_listener = {handle_surface_configure };static void handle_toplevel_configure(void *data, struct xdg_toplevel *toplevel,int32_t width, int32_t height,struct wl_array *states) { }static void handle_toplevel_close(void *data, struct xdg_toplevel *xdg_toplevel) { }static const struct xdg_toplevel_listener xdg_toplevel_listener = {handle_toplevel_configure,handle_toplevel_close, };bool initWaylandConnection() { if ((display = wl_display_connect(NULL)) == NULL){printf("Failed to connect to Wayland display!\n");return false;}if ((registry = wl_display_get_registry(display)) == NULL){printf("Faield to get Wayland registry!\n");return false;}wl_registry_add_listener(registry, registry_listener, NULL);wl_display_dispatch(display);if (!compositor){printf("Could not bind Wayland protocols!\n");return false;}return true; }bool initializeWindow(struct window *window) {initWaylandConnection();window-surface = wl_compositor_create_surface (compositor);window-xdg_surface = xdg_wm_base_get_xdg_surface(wm_base, window-surface);if (window-xdg_surface == NULL){printf("Failed to get Wayland xdg surface\n");return false;} else {xdg_surface_add_listener(window-xdg_surface, xdg_surface_listener, window
http://www.zqtcl.cn/news/873616/

相关文章:

  • 点的排版设计网站音乐网站网页设计
  • 牛商网做网站的思路建设网站的机构
  • flash网站制作实例自适应网站做百度推广
  • 深圳建立网站电影里的做视频在线观看网站
  • 国家建设标准发布网站在哪里在线教育网站怎样建设
  • 徐州 商城网站设计winserver wordpress
  • 做网络课程的网站一般网站的架构
  • 网站建设包含哪些内容句容住房和城乡建设局网站
  • 做网站是做完给钱还是新房装修图片
  • 阿里云建站视频wordpress显示摘要插件
  • 济宁网站建设 企业谷网站开发有什么用
  • 网站建设一般多少钱官网代做网站公司哪家好
  • 页面简洁的网站深圳广告宣传片拍摄
  • 做外卖网站青岛助创网络科技有限公司
  • 怎么选择优秀的网站建设公司建设银行宁波分行 招聘网站
  • 工艺品网站模板下载-古色古香建站软件排名
  • 微视频网站源码网站建设目标个人博客dw
  • 山西省建设厅入晋备案网站洛阳网站在哪备案
  • 可以做物理试验的网站有哪些仿微博网站模板
  • 网站横幅怎做网站到期不想续费
  • 黑龙江网站备案管理局济南网站建设策划
  • 网站怎么静态化网页设计与制作图片显示不出来
  • 市场营销推广策划方案网站如何做标题优化
  • 怎么让客户做网站手机网站如何优化
  • 柳州市住房和城乡建设局网站首页赣州章贡区人口
  • 有偷菜餐厅城市建设的网站好的手机网站
  • 做进行网站推广赚钱互联网企业信息服务平台
  • 微信公众号做视频网站吗百度账号登录入口网页版
  • 北京建设银行纪念钞预定官方网站撤销网站备案申请书
  • 网站平台策划书安丘市建设局网站