小编spi*_*lud的帖子

Threejs:平滑地将相机旋转到物体

我刚刚开始学习 Three.js,在编写一个函数时遇到了一些麻烦,该函数以对象位置(Vector3)和以毫秒为单位的时间作为参数,并逐渐旋转相机以面对它。本质上是内置 LookAt 方法的 lerp 版本。

首先,我尝试使用 tweenjs 来获得平滑的旋转过渡。对于开始和结束参数,我创建了一个虚拟对象,并将其位置、旋转和四元数设置为与相机相同,然后我使用其上的 LookAt 函数面向对象,并将其四元数存储在新变量“targetQuaternion”。然后我使用这个变量作为TWEEN.Tween方法中的目标参数来更新camera.quaternion。我之前曾尝试过使用四元数来避免健身房锁定,然后尝试旋转,但没有一个能正常工作。

function rotateCameraToObject(object3D, time) {

var cameraPosition = camera.position.clone();               // camera original position
var cameraRotation = camera.rotation.clone();               // camera original rotation
var cameraQuaternion = camera.quaternion.clone();           // camera original quaternion

var dummyObject = new THREE.Object3D();                     // dummy object


// set dummyObject's position, rotation and quaternion the same as the camera
dummyObject.position.set(cameraPosition.x, cameraPosition.y, cameraPosition.z);
dummyObject.rotation.set(cameraRotation.x, cameraRotation.y, cameraRotation.z);
dummyObject.quaternion.set(cameraQuaternion.x, cameraQuaternion.y, cameraQuaternion.z);


// lookAt object3D
dummyObject.lookAt(object3D);

// store its quaternion in a variable
var …
Run Code Online (Sandbox Code Playgroud)

camera rotation quaternions

3
推荐指数
1
解决办法
7988
查看次数

如何从accept调用获取套接字端口号(C UNIX)

我做了一个简单的客户端/服务器程序,其中服务器等待外部连接,如果客户端的端口号在[1025-2048]范围内,则返回连接套接字,否则返回-1。问题是,当我通过客户端地址(应存储在结构中)获取端口号时,sockaddr它告诉我客户端端口号为零,但在客户端程序中我已将客户端端口号设置为 1999。

服务器

#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/signal.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <errno.h>


int function(int fd_socket) {

    int fd_socket_acc;
    int len;
    int port;
    struct sockaddr_in client_addr;

    puts("WAITING FOR CLIENT...");

    fd_socket_acc = accept(fd_socket, (struct sockaddr*)&client_addr, &len);

    puts("CONNECTION DONE.");

    port = ntohs (client_addr.sin_port);
    printf("client port number: %d \n", port);


    if (port >= 1024 && port <= 2048) {

        close (fd_socket_acc);
        return fd_socket_acc;
    }   
    else {
        close(fd_socket_acc);
        return -1;
    }
}

int main(int …
Run Code Online (Sandbox Code Playgroud)

c unix sockets port

2
推荐指数
1
解决办法
2910
查看次数

标签 统计

c ×1

camera ×1

port ×1

quaternions ×1

rotation ×1

sockets ×1

unix ×1