场景二:参考代码C++

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <vector>
#include <cmath>
#define ll long long
using namespace std;
const int N=1e5+10,mod=1e9+7,INF=0x3f3f3f3f;
vector<int> G[N]; 
int l[N],r[N],pos[N],dfs_clock;
ll val[N];
struct node {
	int Left,Right;
	ll sum;
}NODE[N<<2];
void PushUp(int idx) {
	NODE[idx].sum=NODE[idx<<1].sum+NODE[idx<<1|1].sum;
}
void build(int l, int r, int idx) {
	NODE[idx]={l,r,0};
	if (l==r) {
		NODE[idx].sum=val[pos[l]];
		return;
	}
	int m=(l+r)>>1;
	build(l,m,idx<<1),build(m+1,r,idx<<1|1);
	PushUp(idx);
}
void Updata(int pos, int idx, int val) {
	if (NODE[idx].Left==NODE[idx].Right) {
		NODE[idx].sum=val;
		return;
	}
	int m=(NODE[idx].Left+NODE[idx].Right)>>1;
	if (pos<=m) Updata(pos,idx<<1,val);
	else Updata(pos,idx<<1|1,val);
	PushUp(idx);
}
ll query(int l, int r, int idx) {
	if (NODE[idx].Left==l&&NODE[idx].Right==r) return NODE[idx].sum;
	int m=(NODE[idx].Left+NODE[idx].Right)>>1;
	if (r<=m) return query(l,r,idx<<1);
	else if (l>m) return query(l,r,idx<<1|1);
	else return query(l,m,idx<<1)+query(m+1,r,idx<<1|1);
}
void dfs(int u, int fa) {
	l[u]=++dfs_clock;
	pos[dfs_clock]=u; 
	for (int i=0; i<G[u].size(); i++) {
		int v=G[u][i];
		if (v==fa) continue;
		dfs(v,u);
	}
	r[u]=dfs_clock;
}
int main() {
	int n,q; scanf("%d%d",&n,&q);
	for (int i=1; i<n; i++) {
		int u,v; scanf("%d%d",&u,&v);
		G[u].push_back(v);
		G[v].push_back(u);
	}
	for (int i=1; i<=n; i++) scanf("%lld",&val[i]);
	dfs(1,0);
	build(1,n,1);
	while (q--) {
		int op; scanf("%d",&op);
		if (op==1) {
			int x,y; scanf("%d%d",&x,&y);
			Updata(l[x],1,y);
			val[x]=y;
		} else {
			int x; scanf("%d",&x);
			printf("%lld\n",query(l[x],r[x],1));
		}
	}
    return 0;
} 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是一个使用glfw glad绘制卧室三维场景的完整C++代码代码中包含了一些基本的场景渲染和交互功能,可以作为参考。 ``` #include <glad/glad.h> #include <GLFW/glfw3.h> #include <iostream> void framebuffer_size_callback(GLFWwindow* window, int width, int height); void processInput(GLFWwindow *window); // 窗口大小 const unsigned int SCR_WIDTH = 800; const unsigned int SCR_HEIGHT = 600; int main() { // 初始化glfw glfwInit(); glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); // 创建窗口 GLFWwindow* window = glfwCreateWindow(SCR_WIDTH, SCR_HEIGHT, "Bedroom Scene", NULL, NULL); if (window == NULL) { std::cout << "Failed to create GLFW window" << std::endl; glfwTerminate(); return -1; } glfwMakeContextCurrent(window); // 初始化glad if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) { std::cout << "Failed to initialize GLAD" << std::endl; return -1; } // 设置视口大小 glViewport(0, 0, SCR_WIDTH, SCR_HEIGHT); // 注册窗口大小改变的回调函数 glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); // 渲染循环 while (!glfwWindowShouldClose(window)) { // 处理输入 processInput(window); // 渲染指令 glClearColor(0.2f, 0.3f, 0.3f, 1.0f); glClear(GL_COLOR_BUFFER_BIT); // 交换缓冲区 glfwSwapBuffers(window); glfwPollEvents(); } // 清理 glfwTerminate(); return 0; } void framebuffer_size_callback(GLFWwindow* window, int width, int height) { glViewport(0, 0, width, height); } void processInput(GLFWwindow *window) { if (glfwGetKey(window, GLFW_KEY_ESCAPE) == GLFW_PRESS) glfwSetWindowShouldClose(window, true); } ``` 这个代码只是一个简单的框架,你需要在这个基础上添加你自己的3D场景渲染代码。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值