- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
Three.js 由于纹理加载而呈现黑色场景。
我在 Angular 组件( Angular 版本 8)中使用了 Three.js。
我试图遵循 rendering Earth in WebGL 上的旧的 Three.js 教程现在已弃用 THREE.ImageUtils.loadTexture()
加载网格 Material 贴图的纹理。
它对我不起作用,所以我尝试使用现代 THREE.TextureLoader().load()
.但是,由于某种原因,它从未对回调采取行动。
所以我尝试使用 THREE.TextureLoader().load()
配对 THREE.LoadingManager()
.虽然 THREE.LoadingManager()
的回调似乎有效,但它仍然只产生带有一些光线的黑色场景。
虽然我是使用 Three.js 的新手,
在我看来,我的代码:
...
<div #rendererContainer></div>
...
import {Component, OnInit, ViewChild, ElementRef, AfterViewInit} from '@angular/core';
import * as THREE from 'three';
export class MyComponent implements OnInit, AfterViewInit {
@ViewChild('rendererContainer', {static: false}) rendererContainer: ElementRef;
renderer = new THREE.WebGLRenderer();
scene = null;
camera = null;
mesh = null;
earthSurface = new THREE.MeshStandardMaterial({color: 0xaaaaaa});
constructor() {
// scene and camera
this.scene = new THREE.Scene();
this.camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 0.01, 1000);
this.camera.position.z = 1.5;
// light
this.scene.add(new THREE.AmbientLight(0x333333));
const light = new THREE.DirectionalLight(0xffffff, 1);
light.position.set(5, 3, 5);
this.scene.add(light);
const manager = new THREE.LoadingManager();
const textureLoader = new THREE.TextureLoader(manager);
this.earthSurface.map = textureLoader.load('planet.jpg');
manager.onLoad = () => {
// call back
const geometry = new THREE.SphereGeometry(0.5, 32, 32);
this.mesh = new THREE.Mesh(
geometry,
this.earthSurface
);
this.scene.add(this.mesh);
this.rerender();
console.log(this.earthSurface);
};
}
ngOnInit() {}
ngAfterViewInit() {
this.renderer.setSize(window.innerWidth, window.innerHeight);
this.rendererContainer.nativeElement.appendChild(this.renderer.domElement);
this.animate();
// setInterval(() => {this.rerender();}, 1.5 * 1000);
}
rerender() {
this.renderer.render(this.scene, this.camera);
}
animate() {
this.renderer.render(this.scene, this.camera);
window.requestAnimationFrame(() => this.animate());
}
}
最佳答案
我测试过了,你的代码有一些建议
您可以完全放弃重新渲染功能,只需确保像这样加载场景的颜色:
this.scene = new THREE.Scene();
this.scene.background = new THREE.Color(0xf5f5f5);
this.earthSurface.map = textureLoader.load('https://upload.wikimedia.org/wikipedia/commons/b/b8/Exploding_planet.jpg');
关于angular - 三.js + Angular : texture loading fails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58906753/
我创建了一个类来保存我的模型信息。我必须正确渲染模型并正确包裹纹理,但出于某种原因,如果我有多个模型,它会将我的所有模型纹理化为仅 1 个纹理,如您在此图像中所见:http://imgur.com/d
是否有可能,如果有,如何在 OpenGL4.x 中的不同 channel 上创建和读取具有不同压缩算法的 RGBA 纹理: 没有实际意义的例子A: RG channel 存储以 3Dc 编码的法线贴图
我需要将浮点数据提供给计算着色器。 我看到的 3 种方法是: 着色器存储缓冲区对象 缓冲纹理 “经典”纹理(使用 PBO 将数据上传到 GPU,然后使用 glTexSubImage2D 将数据复制到纹
我会保持简单:本文末尾列出的代码在我的项目中按从上到下的顺序排列。我有一个 OGLES2.0 框架,可以完美渲染除纹理之外的所有内容。渲染单个纹理时,我看到的只是一个尺寸正确的黑盒子。 这是我已验证的
我在 Android 平台上编码。我正在尝试为三角形使用纹理(从 Assets 文件夹加载图像)。当我的应用程序运行时,它只是三角形中的空白白色(不是我想要的纹理)。 我读过一些其他资料,说图像必须是
我有道路的纹理。具有此纹理的线(由三角形条表示)如下所示: 当然,道路可以与其他道路重叠。在这种情况下,我想隐藏道路边界。道路边界具有 alpha 0.6,同时道路具有 alpha 1。那么当它们与具
我正在画一个到 webgl Canvas 上。我可以在 Chrome 和 Firefox 中使用它,但 IE11 似乎会抛出错误。错误指出: drawElements: The texture is
我想使用自定义着色器将纹理渲染到平面上。这个纹理有一个“偏移”属性集,当我使用标准的 threejs Material 时它可以正常工作。但是,我不知道如何在我的自定义片段着色器中访问这些偏移量。它只
导入项目后,Unity 中不断出现此错误。 这是代码: public static void CameraFadeSwap(Texture2D texture){ if(cameraFade)
这就是我在片段着色器中渲染画笔的方式: gl_FragColor.rgb = Color.rgb; gl_FragColor.a = Texture.a * Color.a; 在 (0, 0, 0,
我目前正在尝试在 Android 上开发视频播放器,但在颜色格式方面遇到困难。 上下文:我通过 MediaExtractor/MediaCodec 的标准组合提取和解码视频。因为我需要将提取的帧用作
在 Xcode 13 beta 中运行模拟器,我遇到了崩溃,我该怎么办? _validateTextureView:557: failed assertion `Texture View Valida
在我目前制作的游戏中,我有两个着色器: 一个用于纹理图集上的 Sprite 一个单独加载的粒子形状纹理。 (我决定将此纹理保留在图集之外,因为我的生成器中的粒子是 GL_POINTS)。 目前,我将其
我正在创建两个渲染目标,两者都必须共享后台缓冲区的深度缓冲区,因此我将它们设置为具有相同的多重采样参数很重要,但是 pDevice->CreateTexture(..) 没有给出任何参数设置多重采样类
如何在 POV-Ray 中创建一个看起来像地球的球体?据推测,答案将涉及获取某种地球 map 并以某种方式将其包裹在球体周围作为纹理。谷歌搜索让我找到了http://www.physics.sfasu
是否可以从 中的纹理读取顶点带 WebGL 的着色器? 我写了一个 WebGL page (只是为了尝试一下)并使用 Chrome 7 对其进行测试。一旦我升级到 Chrome 8,它就停止工作。我仔
我正在为一个模型的多个网格渲染不同的纹理,但是我对程序没有太多的了解。有人建议为每个网格创建自己的描述符集,并调用vkCmdBindDescriptorSets()和vkCmdDrawIndexed(
我有一个简单的 Vulkan 设置,它加载了一个相当大的网格文件(女性)并应用了漫反射和法线贴图纹理。 顶点着色器: #version 450 core layout (set = 0, bindin
Apple 现在在其许多产品中都使用了这种纹理: 仔细看看: 您可以看到它不仅仅是一堆线条:它具有随机性元素。一般来说,如何才能做到这一点?我对实现不像对概念那么感兴趣。我在网上看过,但找不到任何提示
我知道这是一个非常常见的问题。我收到无法从未定义中读取属性“纹理”的消息。抱歉,我对 javascript 还很陌生。 我的代码的javascript部分如下 this.createTexture=f
我是一名优秀的程序员,十分优秀!