- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
今天我一直在尝试用 three.js 构建我的第一个天空盒。我已经阅读了很多教程,我最终得到的代码是基于这个:http://learningthreejs.com/blog/2011/08/15/lets-do-a-sky/我确实做了一些更改,以便首先加载图像,并使其与我正在使用的 three.js 版本兼容。
我已经克服了很多小问题才达到我目前所处的位置,但尽管进行了相当艰苦的搜索,但仍找不到我当前问题的任何答案。我的问题是,尽管使用了从互联网上下载的专门构建的天空盒纹理,但很明显我的天空盒是一个有 Angular 和边的立方体。纹理看起来严重扭曲并且一点也不令人信服。
这是我的天空盒的截图:
这是我下载图片的网站链接: http://www.humus.name/index.php?page=Cubemap&item=Yokohama3如您所见,在他们的预览中它看起来好多了。
我用几个不同的下载纹理进行了尝试,每次都非常明显地看到了立方体的内部。
这是我的代码(我包括了我所有的代码,而不仅仅是创建天空盒的部分):
var scene;
var camera;
var renderer;
function createRenderer () {
renderer = new THREE.WebGLRenderer();
renderer.setClearColor(0x000000, 1.0)
renderer.setSize(window.innerWidth, window.innerHeight)
renderer.shadowMapEnabled = true;
//renderer.shadowCameraNear = 0.5;
//renderer.shadowCameraFar = 500;
}
function createCamera () {
camera = new THREE.PerspectiveCamera(
45,
window.innerWidth/window.innerHeight,
0.1, 1000
);
camera.position.x = 50;
camera.position.y = 30;
camera.position.z = 40;
camera.lookAt(scene.position);
}
function createPlane () {
var material = new THREE.MeshLambertMaterial({
color: 0xcccccc,
})
var geometry = new THREE.PlaneGeometry(40, 40)
var plane = new THREE.Mesh(geometry, material)
plane.receiveShadow = true;
plane.rotation.x = -Math.PI/2
plane.position.y = -6;
scene.add(plane)
}
function createLight () {
var spotLight = new THREE.DirectionalLight(0xffffff);
spotLight.position.set( 0, 50, 20 );
spotLight.shadowCameraVisible = true;
spotLight.shadowDarkness = 0.5
spotLight.shadowCameraNear = 0;
spotLight.shadowCameraFar = 100;
spotLight.shadowCameraLeft = -50;
spotLight.shadowCameraRight = 50;
spotLight.shadowCameraTop = 50;
spotLight.shadowCameraBottom = -50;
spotLight.castShadow = true;
scene.add(spotLight);
}
function createSkyboxAndSphere () {
var urlPrefix = "Yokohama3/";
var urls = [ urlPrefix + "posx.jpg", urlPrefix + "negx.jpg",
urlPrefix + "posy.jpg", urlPrefix + "negy.jpg",
urlPrefix + "posz.jpg", urlPrefix + "negz.jpg" ];
var textureCube = THREE.ImageUtils.loadTextureCube( urls , undefined, function () {;
var shader = THREE.ShaderLib["cube"];
var uniforms = THREE.UniformsUtils.clone( shader.uniforms );
shader.uniforms['tCube'].value = textureCube; // textureCube has been init before
var material = new THREE.ShaderMaterial({
fragmentShader : shader.fragmentShader,
vertexShader : shader.vertexShader,
uniforms : shader.uniforms,
depthWrite : false,
side: THREE.BackSide,
});
var geometry = new THREE.BoxGeometry(100, 100, 100)
var skybox = new THREE.Mesh(geometry, material)
scene.add(skybox)
var material = new THREE.MeshPhongMaterial({
color: "red",
envMap: textureCube,
reflectivity: 0.3,
})
var geometry = new THREE.SphereGeometry(6, 30, 15)
var sphere = new THREE.Mesh(geometry, material)
sphere.castShadow = true;
sphere.receiveShadow = true;
scene.add(sphere)
});
}
function init () {
scene = new THREE.Scene();
createRenderer();
createCamera();
createLight();
createPlane ();
createSkyboxAndSphere ();
document.getElementById("container").appendChild(renderer.domElement)
render ()
}
function render () {
renderer.render(scene, camera)
requestAnimationFrame(render);
}
window.onload = function () {
init ();
}
我怀疑我从根本上误解了立方体贴图和天空盒的工作原理——我对此特别陌生,对一般的 javascript 很陌生,我意识到我的知识存在巨大差距。
如果这个问题的答案很明显和/或之前有人问过这个问题,我深表歉意,并先发制人地感谢您的帮助!
最佳答案
您的相机需要位于天空盒的中心——或至少靠近中心。
因此,要么将相机非常靠近移动到框中心,要么每帧更新框位置以匹配相机位置。
或者使天空盒相对于相机从原点偏移大。
或者将天空盒放在一个单独的场景中并有两个摄像机和两个渲染 channel ,如 this example .
three.js r.74
关于javascript - three.js天空盒: obvious corners and lots of distortion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35702881/
目前我正在创建一个 C# 应用程序,它必须从现有数据库中读取大量数据(超过 2,000,000 条记录),并将其与数据库中不存在的大量其他数据(也大约 2,000,000 条记录)进行比较。这些比较主
我正在为需要将一些可变长度数组存储到 mysql 数据库中的系统设计数据库。 数组的长度(最多)为数百甚至数千。 新阵列将定期创建,可能每天数十个。 我应该将这些数组存储到一个很快就会变得巨大的表中还
问题:我有两个大型字符串元胞数组A 和B。我想知道识别 A 中哪些元素包含 B 中哪些元素的最快方法。特别是不循环能不能做到? 最小示例:(我的实际 A 和 B 分别包含 7,000,000 和 22
我有这些表: create table person ( person_id int unsigned auto_increment, person_key varchar(40) n
我正在处理一个简单的页面,但遇到固定位置的问题。想知道是否有人有时间帮助我。 在这里复制粘贴所有代码会太多,但我会粘贴一个链接 http://et4891.com/lecture/protosite.
我正在开发一个项目,需要能够将“很多”、“一些”、“很多”、“一些”等修饰符分类为最小百分比 例如“很多” -> 80% 现在我正在考虑简单地创建一个大字典来关联这些修饰符和数值,例如 一些 -> 1
我想将所有数据从工作表复制到另一个新 Excel 文件的另一工作表。我试过这个: Set wkb = Workbooks.Add wkb.SaveAs myNewFile ThisWorkbook.W
项目运行良好,运行良好,编译良好。直到一些看似随机的时间,它才停止变好。 目前,我遇到了200个流浪错误: ./new:4: error: stray '\376' in program ./new:
我正在开发一个 Android(现在只是 Android,以后可能是 iOS)应用程序,它在很大程度上依赖于拍照,将这些照片存储在某个服务器上,并能够在用户需要时检索任何照片这将是非常频繁的。 在深入
我是 codeigniter 的新手,我刚刚学会使用 codeigniter 已经两周了。我在一个 Controller 中使用超过 26 个功能,每个功能加载不同的 View 。我的问题是,当我加载
下面是我的 3 个 cpp 文件和 2 个头文件。我收到了天文数字的错误,而且大多数都非常不清楚。我是 C++ 的新手并且有 C#/Java 背景。 我很清楚以下可能是语法错误。提前感谢您的帮助。 主
我必须在 Java 程序中存储大量单词 (+200k),并且我想快速访问它们。我只需要知道给定的单词是否属于我的“词典”。我不需要像 这样的一对.如果可能的话,我正在标准库中搜索解决方案。 PS:也
我正在开发一个集成了其他 SDK(例如 Facebook SDK 3.5)的 iOS SDK。为了防止冲突并允许我的客户也导入这些 SDK,我想重命名我的代码中的所有类/枚举(例如,将 FBSessi
我的游戏中有很多角色,因此我有很多纹理。当加载纹理图集(包含大约 5 个不同的图像纹理)时,它会增加内存使用并将其保持在该数量。因此,更多的纹理只会使该数字不断上升,直到有时应用程序崩溃。我不需要同时
哇,大戏!框架有很多静态方法。在我上学的地方,我们被告知永远不要使用任何静态,但 Play!像没有明天一样使用它。这样可以吗?如果有,为什么? 我们(我和 7 个人)计划使用 Play!涉及 Web
我需要更改表中列的值,所以我需要这样做: update members set frequence = 1 where frequence <> 1 我有 700 万行受到影响,我需要分批更新 100
嗨,当我尝试将我的应用程序部署到 Heroku 时,我遇到了一些错误。 当我 pip freeze>requirements.txt 时,我收到此错误: “警告:无法生成分发要求 -lotly 2.7
我用 pthread 编写了一个多线程程序,使用生产者-消费者模型。 当我使用英特尔 VTune 分析器来分析我的程序时,我发现生产者和消费者在 pthread_mutex_unlock 上花费了大量
我有一个要求,我必须缓冲大量数据(以 GB 为单位)以供将来使用。由于没有足够的 RAM 可用于缓冲如此大量的数据,我决定将数据存储在文件中。 现在这里的陷阱是,当我将数据写入文件时,其他线程可能需要
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
我是一名优秀的程序员,十分优秀!